スレッドについておしえてください。
参照おこなうときは、ワーキングメモリから、メインメモリにコピーされて参照され、
代入をおこなうときは、ワーキングメモリから、メインメモリにコピーされるとききました。
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を守らずに利用するのが間違いとはおもいますが。