「これはヤバかったな」という遅刻エピソード

インスタンスフィールドにArrayListを設けて
mainでArrayListをコピーする処理を入れ、
mainとは別のスレッドで、ArrayListから削除する
処理を入れた場合、mainのArrayListのコピーで例外が
発生したりしますか?
下記の例だと、globalList に追加しまくっているときに
Arraylistコピーのカ所で例外等発生しますか?

class Hoge {
List<String> globalList = new ArrayList<String>();

public static void main(String args[]) {
try {
i = 1;
Thread thread = new Thread(new Runnable(){
public void run() {
            while (true) {
globalList.add(new String(i++));
}
}
});
     thread.start();
} catch (InterruptedException e) {
e.printStackTrace();
}

   while (true) {
   List<String> tempList = new ArrayList<String>(globalList);//Arraylistコピー
   }
}
}

A 回答 (1件)

ArrayListはスレッドセーフではないので、


何が起きるか予測できませんし、
予測しても無意味です。
次のJava update で全く違う動作になっても
文句いえません。

こうした使い方を避けることを考えましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!