您的位置:首页 > 编程语言 > Java开发

线程安全的实现延迟初始化的方案

2015-09-16 20:39 519 查看
1、基于volatile的解决方案

public class SafeDoubleCheckedLocking {

private volatile static Instance instance;

public static Instance getInstance(){
if(instance == null){
synchronized(SafeDoubleCheckedLocking.class){
if(instance == null){
instance = new Instance();//instance为volatile
}
}
}
return instance;
}
}

2基于类初始化的解决方案
JVM在类的初始化阶段(即在Class被加载后,且被线程使用之前),会执行类的初始化。在执行类的初始化期间,JVM会去获取一个锁。这个锁

可以同步多个线程对同一个类的初始化。

基于这个特性,可以实现另一种线程安全的延迟初始化方案。

public class InstanceFactory {

private static class InstanceHolder{
public static Instance instance = new Instance();
}

public static Instance getInstance(){
return InstanceHolder.instance;
}
}

该内容摘自《Java并发编程的艺术》。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jvm 线程安全 并发