1.public class javaThreadTest implements Runnable {
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
@Test
public void threadtest() {
map.put("test", 0);
for (int i = 0; i < 10000; i++) {
new Thread(this).start();
}
}
public void run() {
map.put("test", map.get("test") + 1);
System.out.println("map.value::::::::" + map.get("test"));
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
@Test
public void threadtest() {
map.put("test", 0);
for (int i = 0; i < 10000; i++) {
new Thread(this).start();
}
}
public void run() {
map.put("test", map.get("test") + 1);
System.out.println("map.value::::::::" + map.get("test"));
}
打出的数据不是递增的
在你调用完get后,调用put之前,如果有另外一个线程调用了map.put(name, x),你再去执行map.put(name,x),就很可能把前面的操作结果覆盖掉了。所以,即使在线程安全的情况下,你还违反原子