【问题标题】:How synchronized keyword in java have been implemented?java中的同步关键字是如何实现的?
【发布时间】:2012-09-11 07:51:46
【问题描述】:

我正在阅读操作系统,但遇到了几个进程间通信问题。这些可以通过使用monitor monitor 概念来解决,java 通过 synchronized 关键字提供。

我想知道synchronized关键字是如何实现的?我试图查看源,但我无法找到它。 synchronized 是否正在使用诸如 down up 之类的系统调用(信号量基本上使用)来监视锁?

JVM 对这个过程有帮助吗?

我是 Java 新手,我想在了解 Java 中的线程概念之前了解事情是如何工作的。

提前致谢。

【问题讨论】:

标签: java synchronization system-calls


【解决方案1】:

没有定义同步是如何实现的,只定义了它是如何工作的。

在许多 JVM 中,优化其行为的工作非常复杂(例如,它试图避免进行系统调用,因为这些调用相对较慢)例如,JIT 可以结合或消除与 synchronized 关键字的锁定,如果它确定了这一点可以的。

【讨论】:

  • 你的意思是如果没有系统调用的帮助,Java 会实现这个功能?
  • JIT 生成实现此功能的本机代码。它通常会自旋锁一段时间并将系统时间作为后备。它不会像这样调用现有代码。
  • @PeterLawrey 是在 JVM 范围内实现“同步”(您提到的 JIT 优化除外)还是操作系统的问题?无论哪种方式,我都想至少了解 JVM/OS/硬件级别的一些抽象实现细节,以了解 CAS 比“同步”更好吗?
  • @user104309 除非您有硬件事务内存支持,否则 CAS 总是更轻量级,但这部分是因为 CAS 在功能上受到更多限制。我会先从 synchronized 开始,如果您描述性能问题,请考虑 CAS。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多