LinkedList、BlockingQueuesのような多くのキュー実装がJavaに存在します。それらはすべてスレッドセーフですか?いいえと答えた場合、どの実装が同時アクセスをサポートし、どれが最高のパフォーマンスを提供しますか?
注:私はJDK1.6を使用しています。
LinkedList、BlockingQueuesのような多くのキュー実装がJavaに存在します。それらはすべてスレッドセーフですか?いいえと答えた場合、どの実装が同時アクセスをサポートし、どれが最高のパフォーマンスを提供しますか?
注:私はJDK1.6を使用しています。
ほとんどの標準コレクションはスレッドセーフではありません。この情報は、APIドキュメントを読むときに見つかります。
たとえば、LinkedListのドキュメント:
複数のスレッドがリンクリストに同時にアクセスし、少なくとも1つのスレッドがリストを構造的に変更する場合は、外部で同期する必要があります
複数のスレッドからアクセスされるコレクションについては、java.util.concurrentパッケージを確認する必要があります
いいえLinkedList
。たとえば、スレッドセーフではありません。
パッケージに含まれているものjava.util.concurrent
はスレッドセーフです。
最高のパフォーマンスは、それらをどのように使用するかによって異なります。また、パフォーマンスに基づいて実装を選択するのではなく、キューの動作とキューで何をする必要があるかに基づいて実装を選択します。たとえば、aのSynchronousQueue
動作はaLinkedList
または。とはまったく異なりますArrayBlockingQueue
。