2010-10-24 7 views
6

Załadowałem wiele obrazów z Internetu za pomocą ThreadPoolExecutor.Jak usunąć stare zadania w kolejce w ThreadPoolExecutor i wstawić nowe zadania?

Po znalezieniu nowych obrazów muszę je najpierw wyrenderować, w takim przypadku chcę zrezygnować ze starych zadań, które są nadal w kolejce w ThreadPoolExecutor i dodać te nowe elementy do pobrania.

Odkryłem, że w ThreadPoolExecutor nie ma metody "czystej kolejki", a metoda "purge" brzmi nie do tego dobrze.

Co należy zrobić?

Po prostu pomyślałem o nazwie "shutdown" tego executora i odtworzyć nowy, aby to zrobić, nie jestem pewien, czy jest to właściwe.

Odpowiedz

4

ThreadPoolExecutor ma metodę remove(). Możesz użyć tego w połączeniu z getQueue() lub zachować własną kolekcję Runnable s, które były w kolejce i mogą wymagać usunięcia. Jeśli zachowasz swoją własną kolekcję, pamiętaj o mechaniźmie, które usunie bieganie z kolekcji po jej zakończeniu.

7

Czy próbowałeś tego?

ThreadPoolExecutor pool = .....; pool.remove(task); 

zadaniem jest Runnable, które chcesz usunąć.

lub jeśli chcesz usunąć kolejkę.

pool.getQueue().clear() 
+0

Mimo że javadoc mówi, że naprawdę nie powinieneś używać metody getQueue, prawdopodobnie jest to podejście, które chcesz zastosować w oparciu o pytanie OP. –

+0

Tak, javadoc mówi, że metoda getQueue nie jest polecana do użycia, po prostu pomyślałem, że to nie jest dobra droga. – virsir

Powiązane problemy