public E poll() {
final AtomicInteger count = this.count;
if (count.get() == 0)
return null;
E x = null;
int c = -1;
final ReentrantLock takeLock = this.takeLock;
takeLock.lock();
try {
if (count.get() > 0) {
x = dequeue();
c = count.getAndDecrement();
if (c > 1)
notEmpty.signal();
}
} finally {
takeLock.unlock();
}
if (c == capacity)
signalNotFull();
return x;
}
Может ли кто-нибудь объяснить, почему мы назначаем this.count локальной переменной, а также почему локальная переменная объявлена как final?
volatile
объяснение имеет (некоторый) смысл в отношенииAtomicInteger
- не в отношенииReentrantLock
. - person Nir Alfasi   schedule 23.10.2013AtomicInteger
: в этом случае автор мог бы просто использоватьcount.get()
в начале метода и работать сint
. - person Nir Alfasi   schedule 23.10.2013final
, есть более высокая вероятность того, что локальная переменная в конечном итоге будет привязана к регистру процессора - person Nir Alfasi   schedule 23.10.2013