/**
-
线程安全的懒汉式
*/
public class SingletonThread {
private static SingletonThread instance;
private SingletonThread() {
}
// 1.多线程情况下加锁,保证多个线程同时访问时,不会创建多个实例
// 2.然而这段代码的问题是每次调用getInstance方法都会加锁,会造成性能浪费
public static SingletonThread getInstance(){
synchronized (SingletonThread.class){
if (instance == null) {
instance = new SingletonThread();
}
return instance;
}
}// 3.因此在外层再判断一遍是否有实例,没有再放线程进去
// 4.为什么里外层都做是否有实例的判断,是因为如果是两个或多个线程,它们都会进入第一个判断,此时因为锁,
// 第一个线程进去做下一步判断并创建了实例,而第二线程在等待第一个线程结束之后也会接着执行,此时如果没有
// 非空判断,它就会又实例一个对象,就不是单例了
public static SingletonThread getInstance1(){
if (instance == null) {
synchronized (SingletonThread.class){
if (instance == null) {