All*_*t86 3 java concurrency multithreading
在Java并发类中,我建议在多线程应用程序中使用以下代码作为计数器
private volatile int count;
Run Code Online (Sandbox Code Playgroud)
我问自己是否可以将volatile关键字与包装类Integer一起使用而不是原始类型int(见下文):
private volatile Integer count;
Run Code Online (Sandbox Code Playgroud)
在这种情况下使用Integer包装类是否正确?
实际上两个版本都是糟糕的设计.
来自Java Concurrency in Practice p.39:
...语义
volatile不够强大,无法使增量操作(count ++)原子,除非你能保证变量只能从一个线程写入.(原子变量确实提供原子读 - 修改 - 写支持,通常可以用作"更好的易变量")
所以我建议使用 AtomicInteger
private AtomicInteger count;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |