单例模式
什么是单例模式
一个类只能产生一个实例对象
应用场景
windows任务管理器
如何编写
- 构造器私有
- 对外提供拿到对象的方法
- 声明一个static的成员变量,类加载的时候创建当前单例对象
- 在获取对象的方法中返回成员变量的值
饿汉式:
优点 | 缺点 |
---|---|
天然线程安全 | 不能做到延迟加载 |
class Single{
private static Single single = new Single();
//1.私有化构造器
private Single() {
}
//2.公开的拿到Single对象方法
public static Single getInstance() {
return single;
}
}
public static void main(String[] args) {
Single s = Single.getInstance();//通过类名.方法拿到single对象。
}
懒汉式:
优点 | 缺点 |
---|---|
能够做到延迟加载 | 线程不安全 |
public class Lazy {
private static Lazy lazy = null;
private Lazy() {
}
public static Lazy getInstance() {
if(lazy == null) {
lazy = new Lazy();
}
return lazy;
}
加锁版
class Lazy {
private static Lazy lazy = null;
private Lazy() {
}
public static Lazy getInstance() {
if (lazy == null) {
synchronized (Lazy.class) {
if (lazy == null) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
lazy = new Lazy();
}
}
}
return lazy;
}
}