新しいリストを作成し、それにいくつかのものを入れ、それを別のスレッドに渡して操作するメソッド(以下の例)があります。
これはスレッドセーフのようです。リストは、それを作成するメソッドに対してローカルです。メソッドはリストを操作し、操作が完了するまでリストを別のスレッドに渡しません。
リストは 2 つの別々のスレッドでアクセスされますが、同期されていないためです。
これは受け入れられるスレッドセーフなコードですか?
class App
{
public static void main(String[] args)
{
final ArrayList<Integer> list = new ArrayList<Integer>();
list.add(4);
list.add(5);
final ExecutorService es = Executors.newSingleThreadExecutor();
es.execute(new Runnable() {
@Override public void run()
{
for (Integer i : list)
System.out.println(i);
}});
es.shutdown();
}
}