【初心者】Java質問・相談スレッド78【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0893デフォルトの名無しさん
2006/01/09(月) 23:08:30参照おこなうときは、ワーキングメモリから、メインメモリにコピーされて参照され、
代入をおこなうときは、ワーキングメモリから、メインメモリにコピーされるとききました。
volatileとか、synchronizedでまもらないと、いつ、参照と、代入が、
メインメモリに対しておこなわれるかわからないともききました。
ということなのですが、以下のようなプログラムの場合、mapにputした値が消えたり、
putした値がみえなかったりするもんなのでしょうか。
import java.util.*;
class Runner implements Runnable {
private String key;private Map map;
public Runner(String key, Map map) {
this.key = key;this.map = map;
}
public void run() {
for (int i = 0; i < 1000; i++) {
String buf = key + i;
map.put(buf, buf);
}
}
public static void main(String[] args) {
Map map = new HashMap();
for (int i = 0; i < 1000; i++) {
new Thread(new Runner(String.valueOf(i), map)).start();
}
}
}
それ以前に、複数スレッドからスレッドセーフでないHashMapを守らずに利用するのが間違いとはおもいますが。
■ このスレッドは過去ログ倉庫に格納されています