在Java中,如果方法由synchronized
关键字限定,则它确保单个线程可以随时通过操作对象monitor
来访问此方法,以便在线程进入同步时它锁定monitor
的方法,以便所有其他线程知道它已被另一个线程锁定。
我的问题是同步块如何实现同步,我的意思是没有与此同步块关联的monitor
所以它用于确定该块是否已经执行的指示是什么?我迷失在这里。
答案 0 :(得分:3)
每个对象都有一个与之关联的隐式锁。进入同步块时,进程必须先获取对象的锁定才能继续。退出同步块时会返回锁定。
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
}
}
}