pep*_*eps 2 java multithreading thread-safety
例如,如果我多次从多个线程和每个线程运行此代码,是否会有数据竞争?
public boolean swap(int i, int j) {
if (value.get(i) <= 0 || value.get(j) >= maxval) {
return false;
}
value.decrementAndGet(i);
value.incrementAndGet(j);
return true;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果我在这里使用decrementAndGet或getAndDecrement有什么区别吗?
这里的值是AtomicIntegerArray.我需要在不同的同步方法中进行性能测试.所以我在值中交换elemtents,看看输出总和是否与预期相同
我的任务是找到一个"不应该是DRF"但"必须仍然无死锁"的方法,并且比ReentrantLock快得多.所以我很难找到一种有数据竞争的方法......
是的,incrementAndGet是线程安全的.
incrementAndGet并且getAndIncrement与++ivs 相同i++.即
int i = 0;
i++ // <- expression returns 0, i is now 1
++i // <- expression return 2, i is now 2
Run Code Online (Sandbox Code Playgroud)
同上decrement.
您的代码,但是,是不是您拨打线程get跨两次||的if.所以价值可以在value.get(i)和之间改变value.get(j),无论如何value.
| 归档时间: |
|
| 查看次数: |
7012 次 |
| 最近记录: |