线程启动会导致内存屏障(共享变量会持久存储在内存中)吗?

时间:2011-08-20 00:17:10

标签: java multithreading

我想知道调用线程启动是否具有更新volatile或获取锁定后的安全效果?

2 个答案:

答案 0 :(得分:1)

新启动的线程将充当该特定线程的内存屏障。

所有其他线程必须同步访问(通过输入synchronized阻止或获取锁定)以查看更新的非最终非易失性变量。

答案 1 :(得分:1)

引用http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html#MemoryVisibility

  
      
  • 在启动线程中的任何操作之前发生对线程启动的调用。
  •   

以及列出的其他效果:

  
      
  • 监视器的解锁(同步块或方法退出)   发生在每个后续锁定之前(同步块或方法)   那个监视器的入口)。而且因为发生在之前的关系   是传递的,解锁之前线程的所有动作   发生 - 在任何线程锁定之后的所有操作之前发生   监控。

  •   
  • 对易失性字段的写入发生在每次后续之前   读取同一个字段。易失性字段的写入和读取具有   进入和退出监视器时的内存一致性效果类似,   但不要求互斥锁定。

  •   

所以是的它具有相同的效果