单例模式的思想很简单,就是确保类只有一个实例。
使用它的好处:
1、控制资源的使用,通过线程同步来控制资源的并发访问;
2、控制实例产生的数量,达到节约资源的目的。
3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。
缓存、日志、创建比较耗时的往往可以设计成单例
下面看看它的两种模式:
懒汉模式 :
public class SingleDemo {
int count = 0;
/**
*懒汉模式
**/
private static SingleDemo singleDemo = null;
private SingleDemo(){
}
public static SingleDemo newInstance(){
if(singleDemo == null){
singleDemo = new SingleDemo();
}
return singleDemo;
}
//解决多线程的问题,加锁
public static SingleDemo newInstance2(){
if(singleDemo == null){
singleDemo = new SingleDemo();
}
return singleDemo;
}
}
饥汉模式:
int count = 0;
/**
*饥汉模式
**/
//全局变量,只有一个
private static SingleDemo02 singleDemo = new SingleDemo02();
private SingleDemo02(){
}
//多线程的时候不会出问题,不需要加锁
public static SingleDemo02 newInstance(){
return singleDemo;
}