java - synchronized block 是如何实现同步的

标签 java multithreading synchronization mutex

在 Java 中,如果一个方法被 synchronized 关键字限定,它通过操作对象 monitor 来确保这个方法在任何时候都可以被单个线程访问,这样当线程进入同步方法时,它会锁定 monitor,以便所有其他线程知道它已被另一个线程锁定。

我这里的问题是synchronized block 是如何实现同步的,我的意思是没有monitor与这个synchronized block 关联,那么它使用什么指示来确定这个 block 是否已经在执行中?我在这里迷路了。

最佳答案

每个对象都有一个与之关联的隐式锁。当进入同步块(synchronized block)时,进程必须在继续之前获取对象的锁。退出同步块(synchronized block)时返回锁。

public class SomeClass {
   private Object mutex = new Object();
   public static synchronized void method1() {
      // static methods aquire the class level lock for SomeClass 
   }
   public synchronized void method2() {
      // aquire the lock associated with 'this' instance (of SomeClass)
   }
   public void method3() {
      synchronized (mutex) {
         // aquire the lock of the mutex object
      }
   }
}

关于java - synchronized block 是如何实现同步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22966973/

相关文章:

java - 以编程方式启用或禁用 TestNG 中的断言

c - sync() 调用和sync 命令有何不同?

java - 线程需要等待列表更新

java - 写入 Excel 文件模板不遵循定义的单元格数据格式

java - 如何在java中运行ffmpeg终端(mac)命令

java - 下面的代码运行成功,那么是否意味着我们可以启动线程两次?

c - 如何在 Windows 中检索线程的起始地址?

c - C pthreads 问题和 malloc/seg 错误

python - GStreamer:将延迟/间隙/移位引入音频

java - 为什么java和c#在简单加法上不同