Это дополнительный вопрос из моего предыдущего вопроса здесь .
Я использую PriorityBlockingQueue
сейчас.Я изменил моего продюсера на следующее:
synchronized(Manager.queue) {
Manager.queue.add(new Job());
Manager.queue.notify();
}
И изменил Consumer
на следующее.Полный скелет кода здесь:
//my consumer thread run()
public void run() {
synchronized(Manager.queue) {
while (Manager.queue.peek() == null) {
System.out.println("111111111111111");
try {
Manager.queue.wait();
} catch (InterruptedException e) {
}
}
Job job=Manager.queue.peek();
if (job != null) {
submitJob(job);
if (job.SubmissionFailed.equals("false")) {
// successful submission. Remove from queue. Add to another.
Manager.queue.poll();
Manager.submissionQueue.put(job.uniqueid, job);
}
}
}
Мой код работает только в первый раз (сначала производят и сначала потребляют), но он не работает во второй раз.Где-то логика ожидания / уведомления не работает, я думаю.Производитель отправляет новые задания в очередь, но потребитель больше не peek
.На самом деле, он даже не заходит в цикл while
и не печатает 111111111111111
.
В чем проблема?Как это исправить?