У меня есть этот метод:
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 ()?
Я считаю, что присвоение логического значения является атомарным, поэтому только один потокмогу сделать это одновременно.
Идея в том, что мы хотим избежать блокировки двух потоков.Мы также не хотим, чтобы два разных кодовых пути захватывали блокировку, даже если они находятся в одном потоке.