1、单例分为懒汉式和饿汉式,饿汉式不涉及线程安全问题
2、解决单例懒汉式的线程安全问题代码
public class ThreadSingle {
private static ThreadSingle threadSingle = null;
private ThreadSingle(){};
public static ThreadSingle getTreadSingle(){
if(threadSingle==null){
synchronized (ThreadSingle.class){
if(threadSingle==null){
threadSingle = new ThreadSingle();
}
}
}
return threadSingle;
}
}
这里面要注意几个问题
1、没有使用同步函数原因
因为同步函数的锁为this,而函数被静态修饰了之后方法的对象只能是类的字节码对象
2、同步代码块为什么只能能是类的字节码对象
因为同步代码块在静态函数里所以这里只能引用类的字节码对象作为锁
3、为什么要在同步代码块外嵌一个判断
提高效率