我有这个方法:
public void lock(Asyncc.IAsyncCallback<Unlock, Object> cb) {
synchronized (this) {
if (this.locked) {
this.queue.add(cb);
return;
}
this.locked = true;
}
cb.done(null, this.makeUnlock(true));
}
我可以使用一些技巧来避免synchronized()调用吗?
我相信分配一个 boolean 值是原子的,因此一次只有一个线程可以执行此操作。
我们的想法是避免 2 个线程获取锁。我们也不希望两个不同的代码路径获取锁,即使它们位于同一线程中。
最佳答案
一种可能加快速度的方法是执行以下操作:
public void lock(Asyncc.IAsyncCallback<Unlock, Object> cb) {
boolean add = false;
synchronized (this) {
if (this.locked) {
add = true;
}
else {
this.locked = true;
}
}
if(add){
this.queue.add(cb);
return;
}
cb.done(null, this.makeUnlock(true));
}
但我仍然不知道是否有办法避免同步块(synchronized block)。
关于java - 避免 boolean 翻转的同步块(synchronized block),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54686941/