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(), т.к. он хранит не засабмиченные объекты, а обёртки со ссылками на них.

Wed, 26 May 2010 @ 09:35

Семафоры и велосипеды

concurrency java

Сделал очередной велосипед: именованный семафор. Для моей задачи, как мне показалось, это был более удобный вариант.

Вкратце:

public class SemaphoreUtils {
    public static boolean enterLock(String name, int workers) { ... }
    public static boolean enterLock(String name, int workers, long waitMillis) { ... }
    public static void leaveLock(String name) { ... }
}

Далее реализация.
читать дальше