Powiel możliwe:
Java Executors: how can I set task priority?Reorder kolejka w ThreadPoolExecutor Java
mam ThreadPoolExecutor zbudowany przy użyciu LinkedBlockingDequeue i chcę manipulować kolejkę podstawowej, jednak czytając to w dokumentacji sprawia, bardzo się denerwuję.
utrzymanie kolejki
Metoda getQueue() pozwala na dostęp do kolejki pracować dla celów monitorowania i debugowania. Używanie tej metody do jakichkolwiek innych celów jest zdecydowanie odradzane. Dwie dostarczone metody, remove (java.lang.Runnable) i purge() są dostępne, aby pomóc w odzyskiwaniu pamięci, gdy duża liczba oczekujących zadań zostanie anulowana.
szczególności chcę móc
- Sprawdź kolejkę, aby zobaczyć, czy element istnieje. Zakładam, że to jest w porządku, ponieważ żadne zablokowanie nie powinno być konieczne, aby po prostu wyświetlić elementy w kolejce.
- Chcę zmienić kolejność kolejki na podstawie jakiegoś sygnału. To oczywiście może być kłopotliwe. Zastanawiam się, czy istnieje preferowany sposób, aby to zrobić, aby nie zepsuć kolejki do innych zastosowań.
Dzięki
Jak wynika z dokumentacji, nie należy kontrolować kolejki w tej metodzie. Powinieneś kontrolować go z kolejki, którą przekazałeś do swojego "ThreadPoolExecutor". – pickypg
Ale czy to nadal nie wiąże się z ryzykiem problemów z gwintowaniem? Pomyślałem, że jeśli wywołasz metodę getQueue(), to jest to samo, co modyfikowanie faktycznego obiektu kolejki, który przekazuję. – Jon
Nie sądzę, mogę użyć PriorityComparator zgodnie z sugestią w drugim pytaniu, ponieważ PriorityComparator nie zapewnia sposób porządkowania elementów, gdy są one w kolejce. – Jon