/*
* 懒汉式单例设计在多线程中如何保持唯一性
*/
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
最新推荐文章于 2025-08-22 11:29:57 发布
本文介绍了一种懒汉式的单例模式实现方法,并通过Java代码示例详细展示了如何在多线程环境下确保实例的唯一性。代码使用了volatile关键字和synchronized同步代码块来防止指令重排和并发创建多个实例的问题。
1301

被折叠的 条评论
为什么被折叠?



