这个问题在这里已经有答案了:
使用同步方法而不是同步块是否有好处(23个答案)
一年前关门了。
假设我有两个单例实现:
1)
class Singleton {
private static Singleton singleton;
private Singleton(){}
public static synchronized Singleton getInstance() {
if(singleton == null ){ singleton = new Singleton(); }
return this.singleton;
}
}
class Singleton {
private static Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
synchronized(Singleton.class){
if(singleton == null ){ singleton = new Singleton(); }
}
return this.singleton;
}
}
它们之间有什么区别?换句话说,对于这种情况,在方法上使用synchronized块和使用synchronized关键字有区别吗?
1条答案
按热度按时间eoxn13cs1#
同步方法提供了一种简单的策略来防止线程干扰和内存一致性错误:如果一个对象对多个线程可见,则对该对象变量的所有读写都通过同步方法完成。
同步方法
java中的同步块是在某个对象上同步的。只有一个线程可以同时执行其中的代码。所有其他试图进入同步块的线程都将被阻止,直到同步块中的线程退出该块。
同步块
https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html