应用实例
mybatis框架的SqlSessionFactory,它用于生产SqlSession实例,作用域是整个应用,需要用单例模式避免重复创建浪费性能。
实现
设计一个售票机单例类,getNextTicketNumber方法会返回1000,1001,1002.....的数列
饿汉式
public class TicketMaker {
static TicketMaker ticketMaker=new TicketMaker();
//饿汉式,类加载阶段即生成了单例实例,浪费了内存
//优点是线程安全,并且不用上锁
int ticket=1000;
private TicketMaker(){}
public static TicketMaker getTicketMaker(){
return ticketMaker;
}
public int getNextTicketNumber(){
return ticket++;
}
}
懒汉式
class LazyLoadingTicketMaker { static LazyLoadingTicketMaker ticketMaker;
//懒汉式,第一次调用生产实例的时候才会new一个tickerMaker
//优点是避免了饿汉式的内存浪费
// 缺点是需要synchronized对get方法加锁,在多线程情况下每次调用方法都需要等待上一次释放锁,时间效率下降
int ticket=1000;
private LazyLoadingTicketMaker(){}
publi