Ric*_*ley 2 java concurrency multithreading java.util.concurrent
我有两个同步块,将被两个并发线程大量访问.我想减少争用和上下文切换.有没有办法在一个AtomicBoolean?上使用CAS(CompareAndSet)操作来实现?
例如:
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) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我不想使用该java.util.concurrent.locks.Lock课程,因为我认为它不会有所作为.我想用CAS.
您可以通过以下方式替换synchronized块:
private final AtomicBoolean flag = new AtomicBoolean();
while (!flag.compareAndSet(false, true));
try {
//your code here
} finally {
flag.set(false);
}
Run Code Online (Sandbox Code Playgroud)
您应该在争用场景下测试它们,以确保它确实提高了性能.CAS在小到轻微的争用下效果最好.
正如@yshavit评论的那样,JIT可能已经为您执行了这种优化,因此再一次测试很重要.