synchronized关键字未能够保证线程同步
首先,我的测试代码如下:
package test;
public class CommenTest {
public static Integer a = 10;
public static void main(String[] args) {
Runnable run = (() -> {
for (int i = 0; i < 1000000; i++) {
synchronized (a) {
a++;
System.out.println(a);
}
}
});
Thread thread1 = new Thread(run);
Thread thread2 = new Thread(run);
thread1.start();
thread2.start();
System.out.println(a);
}
}
然后,我在第9行和第23行这里打断点,使得程序停止,接着我选中线程1和线程2然后点击Resume按钮让这两个线程同时开始执行,并执行完毕,如下图
最后我发现结果并不是预期的2000010,而是一个比这要小的数字,而且多次执行基本没有一次是正确结果,如下图
不知道这是什么原因,希望帮忙解答一下