我有两个同步块,两个并发线程将大量访问这些块。我想减少争用和上下文切换。有没有办法在CAS上使用CAS(CompareAndSet)操作来实现AtomicBoolean
?
前任:
private final Object lock = new Object();
// Thread A executing this
public final void methodA() {
synchronized(lock) {
...
}
}
// Thread B executing this
public final void methodB() {
synchronized(lock) {
...
}
}
我不想使用java.util.concurrent.locks.Lock
该类,因为我认为这不会有所作为。我想使用CAS。
您可以将同步块替换为:
private final AtomicBoolean flag = new AtomicBoolean();
while (!flag.compareAndSet(false, true));
try {
//your code here
} finally {
flag.set(false);
}
您应该在竞争情况下进行测试,以确保确实提高了性能。在小到中度竞争时,CAS效果最佳。
正如@yshavit所说,JIT可能已经为您执行了这种优化,因此再次测试很重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句