Очередь определена для чтения на одном конце и записи на другом конце. Так что нет, не могу положить его обратно.
Но вместо этого вы можете использовать LinkedBlockingDeque , что является более универсальным в этом отношении.
Если это не вариант, вы можете использовать peek (), чтобы получить, но не удалить curJob
, а затем удалить его только if (!condition1)
.
UPDATE
но я использую take (), потому что он блокирует выполнение до тех пор, пока очередь не станет пустой.
peek () уж точно не будет работать для вас. Но я подозреваю недостаток в вашей общей логике тогда. Обычно вам не нужно ставить задания обратно в очередь. Возможно, лучшим решением будет использование другой коллекции, которая известна только рабочему потоку, где вы помещаете задания, которые вы начали, но еще не завершили, и читаете из этой коллекции перед очередью заданий.