import java.util.concurrent.atomic.AtomicReference;
public class HungrySingleton {
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton() {
}
public static HungrySingleton getInstance() {
return instance;
}
}
/**
* 饿汉
*/
class HungrySingleton2 {
private static HungrySingleton2 instance;
static {
instance = new HungrySingleton2();
}
private HungrySingleton2() {
}
public static HungrySingleton2 getInstance() {
return instance;
}
}
/**
* lazy-loading
*/
class LazyLoadingSingleton {
private static class SingletonHolder {
private static final LazyLoadingSingleton instance = new LazyLoadingSingleton();
}
private LazyLoadingSingleton() {
}
public static final LazyLoadingSingleton getInstance() {
return SingletonHolder.instance;
}
}
class EnumSingleton {
private EnumSingleton() {
}
public static EnumSingleton getInstance() {
return Singleton.INSTANCE.getInstance();
}
enum Singleton {
INSTANCE;
/**
* 单例
*/
private EnumSingleton singleton;
//JVM会保证此方法绝对只调用一次
private Singleton() {
singleton = new EnumSingleton();
}
public EnumSingleton getInstance() {
return singleton;
}
}
}
class CasSingleton {
private static final AtomicReference<CasSingleton> INSTANCE = new AtomicReference<CasSingleton>();
private CasSingleton() {}
public static final CasSingleton getInstance() {
while (true) {
CasSingleton singleton = INSTANCE.get();
if (singleton != null) {
return singleton;
}
singleton = new CasSingleton();
INSTANCE.compareAndSet(null,singleton);
return singleton;
}
}
}
【面试】不使用synchronized和lock,如何实现一个线程安全的单例
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 单例,大家肯定都不陌生,这是Java中很重要的一个设计模式。稍微了解一点单例的朋友也都知道实现单例是要考虑并发问题...
- 单例,大家肯定都不陌生,这是Java中很重要的一个设计模式。稍微了解一点单例的朋友也都知道实现单例是要考虑并发问题...
- 心存信念,勇往直前。大家晚上好,欢迎打开风荷感悟时光。今晚我给大家分享的是一个新寓言故事:井底之蛙外传之青蛙小青的...
- whiteSpace: "nowrap",//文字不换行 overflow: "hidden",//隐藏文字 te...