线程安全是相对的概念,即使是jdk提供的线程安全的类,在必要时也要加锁进行同步。
如下例子,输出并不等于1000
package cn.edu.tju;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.stream.IntStream;
public class ThreadSafeTest {
public static void main(String[] args) throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(1000);
ConcurrentHashMap<String,Integer> counter = new ConcurrentHashMap<>();
counter.put("count",0);
IntStream.range(0,1000).forEach( item -> {
Thread t = new Thread(() -> {
int i= counter.get("count");
counter.put("count",i+1);
countDownLatch.countDown();
});
t.start();
});
countDownLatch.await();
System.out.println(counter.get("count"));
}
}