不忘初心,思考梦开始的地方
普通的懒汉式和饿汉式都不用管
简单实现一下线程安全的方式
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
性能更好的双重锁–因为锁的范围更小了
class SingletonDemo{
private SingletonDemo(){}
private volatile static SingletonDemo instance;
public static SingletonDemo getInstance(){
if(instance==null){
synchronized (SingletonDemo.class){
if(instance==null){
instance=new SingletonDemo();
}
}
}
return instance;
}
}
锁可以锁什么,锁对象,锁方法。
锁对象的前提是什么,对象已经创建出来了,双重锁要这么写的原因就是,在对象都没有的时候,其实这里锁一个string都行,但在意义明确的情况下,锁类的字节码对象更好。
这里的volatile,是让对象对于所有的线程都可见。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)