Недавно я изучил некоторые параллельные классы в Java, таких как PriorityBlockingQueue
и вот соответствующий фрагмент кода:Java - блокировка приобретение по методу GET
public E peek() {
final ReentrantLock lock = this.lock;
lock.lock();
E result;
try {
result = size > 0 ? (E) queue[0] : null;
} finally {
lock.unlock();
}
return result;
}
Рассмотрим переписывание этот бит (для целей этот вопрос), учитывая, что очередь [0] либо задана, либо равна нулю, поэтому становится просто return queue[0]
. Теперь я не уверен, что в этом случае сборка на самом деле необходима ... Может ли это быть потокобезопасным без блокировки из-за некоторых оптимизаций компилятора в крайнем случае?
Но очередь имеет длину, например. 10 и не сжимается ни одним из методов, не так ли? SImply call' queue [0] 'в очереди, которая имеет все элементы null, не будет вызывать никаких исключений – struggler
И я предполагаю для этой цели, что' queue.length> 0' – struggler
@struggler - прыгнул с самого начала с этим ответом, я изменил его, на то, что сейчас считаю правильным –