请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

原子性的问题

老师对于原子性我有些疑问:
1.比如a=1;在写入这段时间内,是不是不允许其他线程读取a的值?
如果不允许,那在JMM模型下是怎么保证的?
如果允许的话,原子性存在的意义是什么(在我的理解中你取钱的时候,其他人是不能读取钱的值的,不然后面的人取钱就会余额不足)?

2.synchronized的代码块是随时保持可见性吗?
比如下面的代码,a++刚执行完,其他程序就可以保证立马看到吗?还是说要等大括号执行完才保证a的值可见?
int a;
int b;
synchronized (this){
a++;
b++;
}

正在回答

1回答

悟空 2020-05-25 17:22:53

1 读取不到新值,可以读旧值

2 大括号完毕后

0 回复 有任何疑惑可以回复我~
  • 提问者 涛滔浪 #1
    那原子性存在的意义是什么?因为写入这段时间内,其他线程可以读取的话,其他线程还是会进行其他操作。
    回复 有任何疑惑可以回复我~ 2020-05-25 17:38:10
  • 悟空 回复 提问者 涛滔浪 #2
    有原子操作,那就是由CPU控制的不能被中断的指令。别人读取,不会影响线程安全,可以并行操作。如果你想限制别的线程读取,可以加锁。
    回复 有任何疑惑可以回复我~ 2020-05-26 01:09:35
  • 提问者 涛滔浪 回复 悟空 #3
    好吧明白了。
    回复 有任何疑惑可以回复我~ 2020-05-26 09:50:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信