package com.data.entity;
public class ClassA { //单利 懒汉式进阶版
/*
private: 保证外界无法直接访问该属性
static: 1.保证newC1assA方法可以访问
2.使属性成为静态属性,内存中只会存在一份,如此就能保证实例化操作只会执行一次
*/
private static ClassA ca = null;
private static class Inner{
public static ClassA get(){
//判断是否可能出现线程安全问题 ,以此决定是否需要加锁
//二次校验:尽可能减少加锁的时机
if(ca==null) {
//同步代码块:防止线程安全问题,临界资源对象:当前类的类对象
synchronized (ClassA.class) {
if (ca == null) { //空值判断:确定是第一次获取实例
ca = new ClassA();
}
}
}
return ca;
}
}
/**供外界调用获取该类的唯一实例
static: 方便外界通过类名直接调用该方法
//*@return 当前类的唯一实例对象*/
public static ClassA newClassA(){
//判断是否可能出现线程安全问题 ,以此决定是否需要加锁
//二次校验:尽可能减少加锁的时机
return Inner.get();
}
//构造私有化: 防止外界通过调用构造创建不同对象
private ClassA(){
}
}
import com.data.entity.ClassA;
import com.data.entity.MyList;
import java.lang.reflect.Constructor;
public class text8 {
public static void main(String[] args)throws Exception {
ClassA c1= ClassA.newClassA();
ClassA c2= ClassA.newClassA();
System.out.println(c1);
System.out.println(c2);
Thread S1=new Thread(()->{
ClassA cb1 = ClassA.newClassA();
System.out.println("t1>> "+cb1);
});
Thread S2=new Thread(()->{
ClassA cb1 = ClassA.newClassA();
System.out.println("t2>> "+cb1);
});
S1.start();
S2.start();
}
}