- - PR -
VectorかArrayListか?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-01 18:45
Vectorは同期処理を行うので同期処理が必要でない場合は
ArrayListを使用する必要があると認識しています。 この同期処理が必要かどうかですが 宣言したオブジェクトに対して追加、更新をせず、読込しか 行わないのであればマルチスレッドで同時にアクセスされようが ArrayListを使用して大丈夫でしょうか? | ||||||||
|
投稿日時: 2005-07-01 19:36
どういう要件で使用されるのかはわかりませんが、
通常問題ないと思います。 ちなみに、Vectorがスレッドセーフかというと、条件付のスレッドセーフです。
v.size()を呼んで復帰するまではスレッドセーフですが、 次のv.get(i)を読んだ時点で、iの値の場所にオブジェクトがあるとは限りません。 forステートメント内のv.size()と、次のステートメントのv.size()が 更新されれば違う可能性があると言う事です。 完全にスレッドセーフにするのであれば、
としなければいけません。 Vectorの場合、完全なスレッドセーフが保障されているわけでもなく、 殆どのメソッドに対してsynchronized装飾子が付いている為、 オーバーヘッドが大きく、一般的に推奨されていないと思います。 | ||||||||
|
投稿日時: 2005-07-01 20:14
わざわざ例文までありがとうございます。
>v.size()を呼んで復帰するまではスレッドセーフですが、 >次のv.get(i)を読んだ時点で、iの値の場所にオブジェクトがあるとは限りません。 これにはなるほどです。 ところで今回の要件ですが 読込しかされない処理(多重アクセスはされる)の対象がVector だったので、ArrayListに変更しても構わないかどうかの確認でした。 問題ないとのことだったのでArrayListに変更しようと思います。 |
1