2013-03-17 12 views
6

Czy w Java jest zsynchronizowana klasa Queue? Szukam czegoś takiego jak Vector (który jest zsynchronizowany) vs ArrayList (co nie jest), ale zamiast implementacji interfejsu List, szukam go do wdrożenia Queue.Czy w Java jest zsynchronizowana kolejka?

Należy zauważyć, że nie ma metody Collections.synchronizedQueue do owijania niezsynchronizowanej kolejki i synchronizacji.

+0

ConcurrentLinkedDeque – delicateLatticeworkFever

+0

Jeśli spojrzeć poprzez docs tych klas, które rozciągają https://docs.oracle.com/javase/7/docs/api/java/util/AbstractQueue.html prawdopodobnie znajdziesz to, czego szukasz. I https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html http://stackoverflow.com/questions/2695426/are-linkedblockingqueues-insert-and-remove- metody-thread-safe – rogerdpack

+0

To wydaje się bardzo ważne pytanie, ponieważ kolejka wydaje się różnić od innych kolekcji Java w tym zakresie. Zamierzam poprosić o ponowne otwarcie, po zredagowaniu, aby trochę wyjaśnić pytanie. – rghome

Odpowiedz

7

Spójrz na ArrayBlockingQueue i inne implementacje BlockingQueue.

Z dokumentacji:

kolejce który dodatkowo wspiera operacje czekać na kolejkę, aby stać niepusty podczas pobierania elementu, i czekać na miejsca, aby stać się dostępne w kolejce podczas zapisywania elementu.

+0

To jest kolejka blokująca, która nie jest żądana. – rghome

+0

@rghome Wierzę, że OP chciał znaleźć implementację bezpieczną dla wątków, w tym przypadku moja odpowiedź jest poprawna – bsiamionau

+1

Byłem zaniepokojony zachowaniem blokującym. Jeśli czytnik/program piszący blokuje to zachowanie jest inne niż w standardowej kolejce nieblokującej. Ale czytając API, myślę, że jest to opcjonalne i możesz również czytać/pisać bez blokowania. Więc masz rację. – rghome

Powiązane problemy