单例模式:当有程序中只想保持对象的一份实例的时候通常会使用---单例模式
1:在多线程中 若每一份线程都保存一份实例 通常与ThreadLocal一起使用
2:若多线程访问同一份实例 则要加多线程访问控制--Reentrantlock , 双重检查锁等
public class SingleInstanceExample <T>{
private static T singleInstance = null;
private SingleInstanceExample(T single){
singleInstance = single;
}
public static T getInstance(){
if(singleInstance == null){
singleInstance = new T();
}
return singleInstance;
}
}
注意三点:
1: private static 保证该类所有对象只有这一个实例
2: public static T getInstance() 访问singleInstance 唯一方法
多线程访问同一实例版本
private final static ReentrantLock lock = new ReentrantLock();
public static T getInstance(){
lock.lock;
try{
if(singleInstance == null){
singleInstance = new T();
}finally{
lock.unlock();
}
return singleInstance;
}