当通过void
方法写入值时,如果另一个线程试图读取同一个键的值,那么读者线程会得到什么?旧值,新值或某些“垃圾”值?
答案 0 :(得分:1)
如果第一个线程的get
操作已完成,则第二个线程put
将看到新值。否则,它将看到旧值。
请注意"已完成"在这种情况下,这不是一个明确定义的概念。在put
调用返回之前,可以认为操作已完成。
但可以依赖两件事:
put
之前看到第一个线程对该对象所做的所有写入。后者由Java内存模型保证,因为javadoc谈论的发生在之前。
1 - 假设在第一个线程的put
和访问get
返回的对象的第二个线程之间的间隔期间没有对象的其他更新
答案 1 :(得分:0)
来自Javadoc:
检索反映了最近已完成更新操作的结果。 (更正式地说,给定密钥的更新操作与报告更新值的该密钥的任何(非空)检索之前发生关系。)