Dav*_*run 3 java concurrency multithreading
如果int(整数)类型的变量在Java中具有固有的原子性,如下面的 Effective Java的摘录,那么为什么我们在示例中看到整数值的不一致状态:https: //docs.oracle.com/javase/tutorial/essential/concurrency /syncmeth.html
语言规范保证读取或写入变量是原子的,除非变量的类型为long或double [JLS,17.4.7].换句话说,读取long或double以外的变量可以保证返回某个线程存储到该变量中的值,即使多个线程同时修改变量而没有同步也是如此.
以上项目与我相矛盾.
您的错误是将各个操作等同于读取值和将值写入递增等操作,这需要多次操作.
链接到的示例包含递增和递减int变量的示例.这些操作看起来像代码中的一个操作,但它们实际上是幕后的两个操作.要递增或递减,您必须读取值,更改它,然后写入值.
必须将这些操作同步为线程安全的,因为它们包含多个操作,如果由于竞争条件而中断将导致不正确的值.
即使单个读取或写入操作本身是一致的,也需要同步一组多个操作以保持一致性.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |