english | блог | контакт
Thu, 28 Oct 2010 @ 16:12

ThreadPoolExecutor и очередь задач

Теги: concurrency java

"Совершенно случайно" наткнулся и поправил очень старый баг в приложении. Содержание можно выразить следующими строчками:

void submitTask(ThreadPoolExecutor executorService, Runnable task) {
  executorService.submit(task);
}
boolean checkTaskInQueue(ThreadPoolExecutor executorService, Runnable task) {
  // а вот тут - баг:
  return executorService.getQueue().contains(task);
}

Не зная, ни за что не заподозрил бы сие строки. Ан нет, авторы даже в javadoc предостерегают от обращений к ThreadPoolExecutor.getQueue(), т.к. он хранит не засабмиченные объекты, а обёртки со ссылками на них.