/**
* 多种单利模式的实现,对于第一种实现,缺点是无法控制对象在何时生成,
* 比如该类如果还有一个静态变量就会导致单例被提前实现
* 第二种方式,对于多线程环境下,可以通过增加synchronized来实现,
* 但会增加系统的开销,如果不加锁,可能会导致对象被多次创建
* 第三种方式 不需要加锁在在多线程的环境中也能很好的满足要求
*/
class sigletonDemoNormal{
private static sigletonDemoNormal instance=new sigletonDemoNormal();
public static sigletonDemoNormal getInstance(){
return instance;
}
}
class sigletonDemo{
private static sigletonDemo instance;
public sigletonDemo getInstance(){
if(instance==null)
instance = new sigletonDemo();
return instance;
}
}
public class safeSigleton {
private safeSigleton(){
System.out.println("create safeSigleton object");
}
//这种方式不用加锁
private static class safeSigletonHolder{
private static safeSigleton instance = new safeSigleton();
}
public static safeSigleton geinstance(){
return safeSigletonHolder.instance;
}
}
除此之外,最近在看书的时候,看到atomicInteger的内部实现利用了无锁的CAS算法来保证线程的安全性,这部分源码可以研读下。