idea多线程调试懒汉式单例线程安全问题
一.问题描述
懒汉式单例如果没有加锁时,会产生线程安全问题。代码如下:
public class LazySingleTon {
private LazySingleTon() {}
public static LazySingleTon instance = null;
public static LazySingleTon getInstance() {
if (null == instance) {
instance = new LazySingleTon();
}
return instance;
}
}
那么,如何用idea来进行多线程并发情况下的模拟呢?
二.代码准备
1.未加锁的懒汉式单例类(上面代码)
2.线程类。(进行线程名,类唯一标志打印等操作)
3.测试类
具体的代码参见:
链接:https://pan.baidu.com/s/1BVhZN_xZDBDRK-XD44zg5A
提取码:1111
三.idea调试方法
1.断点打法:
按照普通方式打一个调试断点-> 右击该断点-> 选中“Suspend”一栏-> 选中“Thread”选项。如下:
2.位置:
a.ASingleTonTest:System.out.println(“end”);
b.LazySingleTonThread:LazySingleTon singleton = LazySingleTon.getInstance();
c.LazySingleTon: if (null == instance) {
3.步骤:
a.进行测试main()调试
b.在***调试界面***出来后,在下拉框中选择:Thread0。
c.F8一直调试到:2.c中的位置再次按F8执行到下一步,此时调试界面显示:instance = null
d.返回***调试界面***,在下拉框中选择:Thread1。直接执行完
e.此时再按照b,在下拉框中选择:Thread0。直接执行完