首页 > 代码库 > 单例模式 懒汉模式
单例模式 懒汉模式
懒汉模式线程不安全:
package com.ddy.singleton;
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
package com.ddy.singleton;
public class Service1 implements Runnable {
private Singleton singleton = null;
//public Set<Singleton> singles = new HashSet<>();
@Override
public void run() {
// TODO Auto-generated method stub
singleton = Singleton.getInstance();
System.out.println(singleton+","+Thread.currentThread().getName());
}
}
package com.ddy.singleton;
public class Test {
public static void main(String[] args) throws InterruptedException {
Service1 t1 = new Service1();
Service1 t2 = new Service1();
new Thread(t1).start();
new Thread(t2).start();
}
}
输出结果不一致 ,说明线程不安全
修改如下:
package com.ddy.singleton;
public class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null){
synchronized (Singleton.class){
if (instance == null) { //Double Checked
instance = new Singleton();
}
}
}
return instance;
}
}
这样就做到线程安全了
单例模式 懒汉模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。