老师,有个点疑惑
来源:10-5 找到错误2

奶茶三兄弟d
2020-02-06
就是假设从0开始,线程1和线程2都在等待,然后经过栅栏,一起执行index++,
- 那此时假设没有冲突,线程1将index值变成1, 而线程2 将index变成了2;
然后一起等待,经过栅栏后来到 synchronized代码块; 那按老师说的一种情况就是,线程2先进入synchronized代码块,此时线程2知道index值为2, 线程2 执行完退出,释放锁,
由于可见性原因,线程1能看到线程2操作的东西,那么当然知道index值是为2! - 老师,假设这里反过来,线程1先进入了synchronized代码块, 此时线程2如果还没来得及将index值刷新到主内存中,线程1是不是还是访问自己内存中的值,index值为1,是这样吗?
那如果是这样的话,感觉后面结果就有错了!所以感觉自己想的有问题…
写回答
1回答
-
奶茶三兄弟d
提问者
2020-02-06
哦~,老师,我理解的可见性有问题~ 因为index是共享变量,所以即便是线程1先进入synchronized代码快,由于可见性,所以的话,线程1能知道线程2操作的结果,就是index的值已经是2了, 应该是这样吧~
032020-03-31
相似问题