IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

1)将普通的调试方式改为:线程调试

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

2)Thread0进入判断null区域

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

3)Thread1进入判断null区域

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

4)Thread0和1分别给单例对象赋值

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

5)Thread0赋值一个地址 552

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

6)Thread1赋值553

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

因此,即时看到打印是相同的值,也不代表是同一个对象,是第二个线程把第一个线程给覆盖了。 从而调试出来:多线程下,懒汉式单例 线程是不安全的。

 

总结:知道多线程如何调试后,以后则学习多线程程序轻松起来。

 

=========================加了同步代码后

IDEA多线程调试技巧(调试懒汉式单例模式是线程不安全 和 加了同步后则是线程安全的深刻理解)

可以看出来Thread0在进入代码块后,Thread1是MONITOR状态,被阻塞着,当Thread0出了代码块后,Thread1才能进来,此时发现lazy已经不为空,因此是线程安全的。