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) { ... } }
Далее реализация.
читать дальше