10

新しいリストを作成し、それにいくつかのものを入れ、それを別のスレッドに渡して操作するメソッド(以下の例)があります。

これはスレッドセーフのようです。リストは、それを作成するメソッドに対してローカルです。メソッドはリストを操作し、操作が完了するまでリストを別のスレッドに渡しません。

リストは 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();
  }
}
4

2 に答える 2