Ted*_*opp 25
使用volatile以保证每个读取访问变量会看到写入该变量的最新值.使用synchronized时,你需要值,为多条指令是稳定的.(注意,这并不一定意味着多个语句;单个语句:
var++; // NOT thread safe!
Run Code Online (Sandbox Code Playgroud)
即使声明也不是线程安全的.你需要这样做:varvolatile
synchronized(LOCK_OBJECT){var++;}
Run Code Online (Sandbox Code Playgroud)
请参阅此处以获取此问题的精彩摘要.
Volatile仅确保读取操作始终通过线程从内存中提供最新状态.但是,它不能确保任何写操作的安全性/顺序,即两个线程可以以任何随机顺序更新volatile变量.此外,它不能确保对变量的多个操作是原子的.
但是,同步块可确保最新的状态和写入安全性.对同步块的访问和更新也是原子的.但是,只有当所讨论的变量的所有访问/更新都使用相同的锁对象时,上述情况才是真的,这样多个线程就不会有权访问变量.
| 归档时间: |
|
| 查看次数: |
10276 次 |
| 最近记录: |