B线程工作空间何值的问题

来源:4-3 volatile不能保证原子性(中)

王小明3

2017-05-07 15:57

在之前讲到可见性时,说,值变更由工作空间->主内存->工作空间 一步不能缺。

但这节课说,B线程将number更新为6并同步主内存后,A线程的工作空间为何还是5?不是volatile保证了可见性了吗?

我的理解是,A工作的工作空间已经变成了6,但A线程之前已经读取过数据了,所以继续沿用之前的操作,是5.不知道我的理解是否正确。

写回答 关注

4回答

  • ricklove
    2017-05-14 15:38:38

    你根本就不理解。。这个volitate,只对单个操作有效,对i++ 或者其他多步的操作,根本保证不了线程安全

  • ricklove
    2017-05-10 19:57:04

    区别就是当voliate对象要去操作工作空间的变量时,会先把工作空间的变量清空,去主存读一下,操作完之后,会先将操作后的数据写到主存里,这个过程是强制的

    _曲終散

    同样有此疑问,并且看了你的解析,我想问问,既然线程1要操作变量,它不需要重新去主存读取一下吗?

    2018-03-18 10:53:22

    共 2 条回复 >

  • ricklove
    2017-05-09 17:26:20

    这个主内存->工作空间,是你读数据的时候,自己去主内存里读的,不是主内存的数据实时的更新到这个工作空间

    王小明3

    这样的话,怎么保证可见性?voliate和普通的区别又在哪?

    2017-05-10 01:37:59

    共 1 条回复 >

  • ricklove
    2017-05-09 17:24:55

    不是你这么理解的,A工作空间的数据还是5,

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55910 学习 · 74 问题

查看课程

相似问题