老师,有个点疑惑

来源:10-5 找到错误2

奶茶三兄弟d

2020-02-06

就是假设从0开始,线程1和线程2都在等待,然后经过栅栏,一起执行index++,

  1. 那此时假设没有冲突,线程1将index值变成1, 而线程2 将index变成了2;
    然后一起等待,经过栅栏后来到 synchronized代码块; 那按老师说的一种情况就是,线程2先进入synchronized代码块,此时线程2知道index值为2, 线程2 执行完退出,释放锁,
    由于可见性原因,线程1能看到线程2操作的东西,那么当然知道index值是为2!
  2. 老师,假设这里反过来,线程1先进入了synchronized代码块, 此时线程2如果还没来得及将index值刷新到主内存中,线程1是不是还是访问自己内存中的值,index值为1,是这样吗?
    那如果是这样的话,感觉后面结果就有错了!所以感觉自己想的有问题…
写回答

1回答

奶茶三兄弟d

提问者

2020-02-06

哦~,老师,我理解的可见性有问题~  因为index是共享变量,所以即便是线程1先进入synchronized代码快,由于可见性,所以的话,线程1能知道线程2操作的结果,就是index的值已经是2了, 应该是这样吧~

0
3
悟空
回复
MarcoLiLiLi
要不你先把JMM相关的内容看完?后面具体讲了可见性
2020-03-31
共3条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程