Mam konsumenta i producenta, która dodaje i usuwa obiekty element z kolejki. Jeśli używam metod put()
i take()
. Czy są jeszcze jakieś problemy z bezpieczeństwem wątków, które muszę jeszcze uwzględnić? Jest to podobne do problemu związanego z ograniczonym buforem i zastanawiałem się, czy zamiast tego użycie kolejki blokującej zastąpi potrzebę użycia semaforów lub monitorów. Obiekt Item sam prawdopodobnie wymagałby synchronizacji (setters, ale gettery nie potrzebują blokady), czy mam rację? I wreszcie, nie jestem pewien, w jaki sposób sprawdzić, czy jest to bezpieczne, ponieważ nie może jednocześnie dokonać oba wątki wywołać take()
wątek bo na kolejność wykonywania jest underterministic. Jakieś pomysły? Dzięki.Korzystanie z LinkedBlockingQueue wystarczająco dobre dla programu wielojęzykowego java?
Odpowiedz
Jest całkowicie bezpieczny wątku za to, co robisz, w rzeczywistości jest to co to jest zaprojektowane. Opis BlockingQueue
(który jest realizowany przez interfejs LinkedBlockingQueue
) stwierdza:
implementacje BlockingQueue są thread-safe. Wszystkie metody kolejkowania uzyskują efekt atomowy przy użyciu wewnętrznych blokad lub innych form kontroli współbieżności.
Jednoczesne put() i podjąć() są niewątku bezpieczny ponieważ używać 2 różnych zamków.
to już odpowiedział tutaj: Are LinkedBlockingQueue's insert and remove methods thread safe?
Podążyłem za linkiem i znalazłem odpowiedź na inny wpis wyjaśniający, dlaczego jest bezpieczny dla wątków. http://stackoverflow.com/questions/26543807/is-blockingqueue-completely-thread-safe-in-java/26543940#26543940 – user1266174
- 1. Java: ArrayBlockingQueue vs. LinkedBlockingQueue
- 2. Java: Czy LinkedBlockingQueue uwzględnia kolejność klientów?
- 3. konfiguracja projektu wielojęzykowego intellij idea
- 4. Uruchamianie programu java z innego programu java
- 5. Czy małe jądro jest wystarczająco dobre do nauki osdev?
- 6. Java: Nie można zarezerwować wystarczająco dużo miejsca dla obiektu sterty
- 7. Co jest lepsze LinkedBlockingQueue nieograniczone lub LinkedBlockingQueue o pojemności
- 8. Jakie są dobre alternatywy dla InstallShield?
- 9. to opóźnienie i przepustowość w AWS SNS wystarczająco dobre, aby zastąpić dedykowane MQ dla pub/sub?
- 10. Korzystanie z Tesseract z java
- 11. Korzystanie z programu ustawiającego-gettera w klasie
- 12. Wdrożenie IntentService przy użyciu LinkedBlockingQueue?
- 13. Korzystanie z "||" w instrukcjach przełączania w java
- 14. Czy struktura Play jest wystarczająco dobra dla następnej dużej aplikacji?
- 15. Czy korzystanie z AutoMocking pojemników dobre czy złe praktyki?
- 16. Czym różni się LinkedBlockingQueue od ConcurrentLinkedQueue?
- 17. Korzystanie mapa java dla zakresu wyszukiwania
- 18. Czy D jest wystarczająco potężny dla tych funkcji?
- 19. Dobre referencje dla syscalls
- 20. Czy korzystanie z programu Lodash w projekcie AngularJS przynosi korzyści?
- 21. Jak ustawić nazwę procesu dla programu Java?
- 22. Czy istnieje dobre wdrożenie i administracja dla środowisk Java?
- 23. Java nie powiedzie się z "Nie można zarezerwować wystarczająco dużo miejsca dla kodu cache"
- 24. Jakie są dobre ramy dokowania dla Java/Swing?
- 25. Korzystanie curl polecenie java
- 26. Korzystanie z C# MethodInvoker.Invoke() dla aplikacji GUI ... czy to jest dobre?
- 27. Dobre praktyki dotyczące obsługi wyjątków Java
- 28. Bezpieczne korzystanie z glMapBufferRange() na Android/Java
- 29. Korzystanie z programu yii2 jest z normalnym tablicy danych
- 30. Korzystanie z „start” polecenia z parametrów przekazywanych do uruchomionego programu
Chociaż kolejność wykonywania jest niedeterministyczny, to nie dowód, że LBQ nie jest wystarczająco dobry, gdyby niektóre przedmioty, które 'put()' 'nie są wyświetlane, lub ten sam przedmiot pojawia się wielokrotnie w wynikach z '' take() ''? –
Sądzę, że jest to możliwy test, ale nie zawsze jest to test specyficzny dla wątku. Może przy użyciu wątku spać w trakcie wywoływania take(), podczas gdy inny wątek też to nazywa? – Dan
To, co Executory używa domyślnie, co prowadzi mnie do pytania; nie możesz użyć usługi ExecutorService, która otacza kolejkę i pulę wątków? –