Używam programu BlockingQueue o stałej wielkości [ArrayBlockingQueue] w aplikacji typu producent/konsument, ale chcę, aby użytkownik mógł zmieniać rozmiar kolejki w locie. Problem polega na tym, że nie ma implementacji BlockingQueue, która umożliwia zmianę pojemności po utworzeniu. Ktoś kiedykolwiek spotkał się z tym wcześniej? Jakieś pomysły?Przeredukowana Java BlockingQueue
Odpowiedz
Można rozszerzyć LinkedBlockingQueue. Jej limit to ograniczenie miękkie (czyli po prostu dodatkowy check) i można zrobić to coś można zmienić (poprzez wyłączenie wbudowanego w jednym i wprowadzenie własnych)
Najbardziej oczywiste rozwiązanie (może lub nie może być odpowiednie w zależności od okoliczności) byłoby po prostu utworzenie kolejki nowej z żądaną zaktualizowaną pojemnością. Następnie przenieś wszystko ze starej kolejki do nowej.
Jeśli to zrobisz, wszystkie wątki z odniesieniem do starej kolejki będą blokowane, czekając na nową zawartość w starej kolejce, a nie nową zawartość w nowej kolejce. –
@bkail: Właśnie dlatego powiedziałem "w zależności od okoliczności". Jeśli OP ma wiele odniesień do kolejki blokującej, to będzie musiał naprawić, aby to rozwiązanie działało (np. Poprzez owijanie samej kolejki wewnątrz obiektu kontenera, który działa jako kolejka zewnętrznie, ale wykonuje nowe alokacje wewnętrznie, gdy pojemność jest zmienione). –
- 1. Java BlockingQueue z dozowaniem?
- 2. Java BlockingQueue opóźnienie wysokie w systemie Linux
- 3. Android Looper vs BlockingQueue?
- 4. Jak dostosować działanie blokowania BlockingQueue?
- 5. Plik PDF do pobrania za pomocą BlockingQueue
- 6. Będąc asynchronicznie powiadamiane o BlockingQueue posiadające element dostępny
- 7. Gdzie należy używać implementacji BlockingQueue zamiast prostych implementacji kolejki?
- 8. Jak przerwać działanie BlockingQueue, które blokuje się przy pobieraniu()?
- 9. Czy działa ta podstawowa pula obiektów Java?
- 10. Java: ArrayBlockingQueue vs. LinkedBlockingQueue
- 11. Java ExecutorService and ThreadPoolExecutor
- 12. kolekcja java java
- 13. Specyfikacja wyjątku java java ...?
- 14. Java rozpoczyna inną aplikację Java
- 15. Aktualizowanie pliku właściwości java java
- 16. Serializuj obiekt Java do kodu Java?
- 17. Tworzenie programu java do kompilowania plików .java
- 18. Android Application + Moduł Java (Java 1.8)
- 19. Czy istnieje parser Java dla języka Java?
- 20. Java Garbage Collection zatrzymuje wszystkie procesy Java
- 21. Skompiluj plik Java ... za pomocą programu Java
- 22. Uruchamianie programu java z innego programu java
- 23. Silna kryptografia Java SE dla Java 7?
- 24. Szyfrowanie AES Java -> PHP -> Java
- 25. Java do XSD lub XSD do Java
- 26. Program Java kończy się wynikiem java: 137
- 27. Java 8 performance VS. Java 7
- 28. Uruchamianie aplikacji java z innej aplikacji java
- 29. Nowy programista Java, podstawowa kompilacja Java
- 30. Kompilowanie zewnętrznych plików .java z poziomu Java
Nie jest to możliwe bez kopiowania/wklejania dużej ilości kodu wewnętrznego. Naprawdę musiałbyś zabrać piłę łańcuchową do osobnej implementacji, np. Tej w Apache Harmony. – jbellis
@jbellis dlaczego musiałbyś skopiować kod do podklasy? –
Nie można uzyskać pożądanej funkcjonalności tutaj poprzez jej podklasę; zbyt wiele jest ostateczne/prywatne. – jbellis