1:懒汉式
public class SingleTest {
private static SingleTest singleTest = null;
private SingleTest(){
}
// 可以在方法上加上synchronized,可以使线程安全,但是这样每次调用都会同步,会影响性能
public static SingleTest getInstance(){
if (singleTest==null){
singleTest = new SingleTest();
}
return singleTest;
}
// 双重锁检查式
//优点:线程安全,且确保了只有第一次调用单例时才会做同步,避免了每次都同步的性能损耗;
//缺点:双重锁降低了程序响应速度和性能
public static SingleTest getInstance2(){
if (singleTest==null){
synchronized (SingleTest.class){
if (singleTest==null){
singleTest = new SingleTest();
}
}
}
return singleTest;
}
// 静态内部类式
//利用了classloader机制来保证初始化instance时只有一个线程,线程安全且没有性能损耗
private static class Single2{
private static final SingleTest INSTANCE = new SingleTest();
}
public static final SingleTest getInstance3(){
return Single2.INSTANCE;
}
}
2:饿汉式
public class SingleTest2 {
//饿汉式 类初始化的时候就立刻实例化,天生线程安全
//系统启动时,占用资源;如果后期这个单例没有被使用,会造成资源浪费
private SingleTest2(){}
private static final SingleTest2 instance = new SingleTest2();
public static SingleTest2 getInstance(){
return instance;
}
}
文章介绍了Java中三种实现单例模式的方法:懒汉式,饿汉式和静态内部类。懒汉式在多线程环境下可能不安全,但可以通过双重锁检查提高安全性。饿汉式在类加载时就创建实例,保证线程安全但可能导致资源浪费。静态内部类方式利用类加载机制保证线程安全,且无额外性能影响。
1320

被折叠的 条评论
为什么被折叠?



