单例模式
单例模式:用来保证一个对象只能被创建一次。
普通版
代码实现如下
public class Singleton{
private static Singleton instance;
private Singleton{
}
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
同步锁单例
单例模式如果再多线程中使用,如果实例为空,可能存在两个线程同时调用 getInstance() 方法的情况。就会操作对象不唯一。没有达到单例的目的。如要解决这种情况,只需要在方法上 添加 syncchonized 关键字保证线程安全。
public class Singleton{
private static Singleton instance;
private Singleton{
}
public static syncchonized Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
or
public static Singleton getInstance(){
syncchonized(Singleton.class)
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
无锁的线程安全单例模式
通过在声明时直接实例化静态成员的方法来保证只有一个实例。这种方式避免了使用同步锁机制和判断实例是否被创建的额外检查。
private static Singleton instance = new Singleton();
private Singleton{
}
public static Singleton getInstance(){
return instance;
}
}