java设计模式
单例模式
饿汉式
饿汉式:比如:一个人很容易饿,害怕自己被饿着,就先把食物准备好,要吃的时候拿来吃就行。也就是在类加载的时候已经已经实例化了
懒汉式:
所谓懒汉式:比如一个人是活一天算一天,要吃东西的时候才去做饭,不会提前做好。也就是默认不会实例化,什么时候要用什么时候去new
懒汉式代码实现:
public class LazyMan {
private LazyMan() {
System.out.println(Thread.currentThread().getName());
}
private volatile static LazyMan lazyMan;
//双重检测锁模式的,懒汉模式单例,DCL懒汉模式
public static LazyMan getInstance() {
if (lazyMan == null) {
synchronized (LazyMan.class) {
if (lazyMan == null) {
lazyMan = new LazyMan(); //不是一个原子性操作
}
}
}
return lazyMan;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
LazyMan.getInstance();
}).start();
}
}
}
饿汉模式代码实现
//饿汉模式
package com.wang.single;
/**
* @author Administrator
*/
public class HungryMan {
private static HungryMan hungryMan = new HungryMan();
private HungryMan hungryMan(){
}
public static HungryMan getInstance(){
return hungryMan;
}
}
关键点:
1)私有构造函数
2)静态私有成员–在类加载时已初始化