par*_*rkr 5 java concurrency summary
我已经阅读了Java Concurrency in Practice,这是一个很好的参考,但我希望看到java.util.concurrent包的用例的简明单页摘要.
例如:
需要注意哪些优点/缺点和陷阱?
oxb*_*kes 11
因为synchronized集合仅保护数据免于因并发访问而导致的损坏.这并不意味着synchronized集合针对并发访问进行了优化.实际上,远非如此 - ConcurrentMap.putIfAbsent一个compareAndSet比锁定整个Map读取更好的机制.
在AtomicInteger和AtomicLong类,应始终使用(在我看来)以上,因为它们更简洁用手具有基本锁定.考虑:
synchronized (lock) {
int old = counter;
counter++;
return old;
}
Run Code Online (Sandbox Code Playgroud)
与以下相比:
int old = counter.getAndIncrement();
Run Code Online (Sandbox Code Playgroud)
我不得不说,这些课程因缺乏可靠性而受到影响.例如,您经常需要一些同步布尔值,其中您wait处于布尔条件.这些可以WaitableBoolean在旧的Doug Lea并发库中获得,但它们被抛弃了j.u.c,我不知道为什么.
这是一个更复杂的问题,因为使用会Locks带来一些开销.事实上,人们常说,ReadWriteLock在典型案例中使用a是没有品脱的.必须使用锁的一种情况是资源的锁定及其解锁不能在相同的词法范围内完成.synchronized在这些案件中无助于帮助.
await,signal和signalAll
完成服务的情况下非常有用,其中一个计算的结果的消耗并不需要在计算提交的点进行访问,但其中很重要的是,计算(或它的结果,或成功)的完成是你的程序知道.例如,这可能是监视失败任务的比例(抛出异常),也可能是资源清理.
| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |