我有这个方法:
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()吗?
我相信布尔值的赋值是原子的,所以一次只有一个线程可以这么做。
这个想法是我们想要避免两个线程获取锁。我们也不希望两个不同的代码路径获取锁,即使它们在同一个线程中。
发布于 2019-02-14 17:25:14
有一种方法可能会让它稍微加速一点,那就是这样做:
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块。
发布于 2019-02-14 18:00:49
也许可以使用AtomicBoolean而不是boolean来避免同步块
https://stackoverflow.com/questions/54686941
复制相似问题