【发布时间】:2015-10-04 17:39:33
【问题描述】:
我正在阅读Synchronized 工作。示例如下:
public class Singleton{
private static volatile Singleton _instance;
public static Singleton getInstance(){
if(_instance == null){
synchronized(Singleton.class){
if(_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
假设两个线程A和B正在访问getInstance();方法,
如果线程 A 在 synchronized 块中,则线程 B 将跳过该块并执行下一个块/语句,或者将等待/阻塞,直到线程 A 离开 synchronized 块。
第二个是什么,为什么synchronized参数中有Singleton.class,什么时候可以是null
下面的Statement是真的吗?
对象上有内在锁:
class A { public synchronized void method1(){...} public synchronized void method2(){...} }如果线程A在
method1,那么threadB就不能进入method2或者任何其他同步方法。
【问题讨论】:
-
删除了我最初的答案。看起来 Java 的语义与 C# 不同,我将其翻译成这种情况。见stackoverflow.com/a/2462215/141172
-
@EricJ。你能确认这是真的吗?
If thread A is in method1 then threadB cannot enter method2 or any other synchronized method .
标签: java multithreading synchronization