单例模式有23种,但是她必须满足 一个类产生一个实例。
单例模式有以下特点:
(1)单例模式只有一个实例;
(2)单例类必须创建自己的唯一实例;
(3)单例类必须给所有其他对象提供这一实例;
懒汉式单例模式:
class MySinglecTon{
private static Object lock = new Object();
private static MySinglecTon singlecTon = null;
private MySinglecTon(){
System.out.println("MySinglecTon().init");
}
public static MySinglecTon getSinglecTon() {
//提供一个全局访问点
if (singlecTon == null) {
synchronized (lock) {
if (singlecTon == null) {
singlecTon = new MySinglecTon();
}
}
}
/*3、if(sigleTon == null) {//第一个线程获取资源后
synchronized (lock) {//接着进行上锁,如果第一个线程的地址没有赋给第一个线程,人后第二个线程进来判断资源为空也可以进来,但是执行不了
sigleTon = new MySigleTon();//至少执行2遍
}
}*/
/*2、synchronized (lock) {//第一个线程进来之后上锁,
if(sigleTon == null) { //进来获取资源后,如果将地址没赋给第一个线程,那第二个线程无法进入,导致资源的浪费
sigleTon = new MySigleTon();
}
}*/
/*1、if(sigleTon == null) {//只适用于单线程
sigleTon = new MySigleTon();
}*/
return singlecTon;
}
public static void main(String[] args) {
MySinglecTon singlecTon = MySinglecTon.getSinglecTon();
System.out.println(singlecTon);
}
}
饿汉式单例模式:
class MySingleTon{
private static MySingleTon singleTon = new MySingleTon();
private