Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

再帰的に発リンクを取得しようとしたら、java.util.ConcurrentModificationException

全く見たことがないException見たらワクワクしますね。

新しいことやってるな~

っていう気分になります。

 

ConcurrentModificationExceptionって出たから、

「おっ?」って思った。

と思ったらなんのこっちゃあらへん、


ArrayListの共有違反でした。

ArrayListの使い方が下手ってことね。

 

複数個所から同時にリストの中身を書き換え、

読み込んだ 場合に発生 するようです。

 

何をしたかと言うと、

とあるURLから発リンクを取得した。

 

その発リンク先(複数)からさらに発リンクをどんどん取得し、

結果を格納するArrayListにじゃんじゃんつっこんだ。

 

そうした時に複数の発リンク先の発リンクを、

同時にArrayListにつっこんだからそうなったんや。

 

結果リストを

Collections.synchronizedList(new ArrayList<String>());

によって生成することで解決。

 

って思ったら、違った。

そもそも構造が間違っていた。