/*
* 懒汉式单例设计在多线程中如何保持唯一性
*/
class A {
private volatile static A instance;
// 私有构造
private A() {
System.out.println("构造方法" + Thread.currentThread().getName()); //输出当前运行线程的名字
}
// 实例化本类
public static A prin() {
// 其他线程等待执行
synchronized(A.class) { //给A类上锁,直到代码块完成
if(instance == null) { //如果该类没有被实例化
instance = new A(); //实例化并赋值后,由于instance对其他线程的可见性,不再实例化A类
}
}
// 如果被实例化过了 返回被实例化的线程
return instance;
}
}
public class Emp {
public static void main(String[] args) {
new Thread(() -> A.prin(),"线程A").start();
new Thread(() -> A.prin(),"线程B").start();
new Thread(() -> A.prin(),"线程C").start();
new Thread(() -> A.prin(),"线程D").start();
new Thread(() -> A.prin(),"线程E").start();
}
}
volatile
最新推荐文章于 2022-04-29 12:53:40 发布