您的位置:首页 > 其它

单例模式中的线程安全问题

2018-08-16 15:43 127 查看

[code]package com.qianfeng.test;

public class Demo {
public static void main(String[] args) {
Test test = new Test();
Thread thread = new Thread(test);
thread.start();
}

}
//单例模式三要素:
// 1.私有的构造方法
// 2.指向自己实例的私有静态引用
// 3.以自己的实例为返回值的静态的公有的方法
// 饿汉式
class Singleton {
private static Singleton singleton = new Singleton();// 指向自己实例的私有静态引用
private Singleton() {
}// 私有的构造方法
public static Singleton getSingleton() {// 以自己实例为返回值的静态的公有的方法
return singleton;//这里只有一行代码,不会发生线程安全问题
}
}

// 懒汉式
class Singleton1 {
private static Singleton1 singleton = null;
private Singleton1() {
}// 私有的构造方法
public static Singleton1 getSingleton() {
if (singleton == null) {//目的:尽量减少线程安全代码的判断次数
synchronized (Singleton1.class) {
// synchronized (Object.class)
if (singleton == null) {
singleton = new Singleton1();
}
}
}
return singleton;
}
}
class Test implements Runnable{
public void run(){
Singleton singleton = Singleton.getSingleton();
}
}

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: