在 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/