【发布时间】:2018-04-12 00:08:19
【问题描述】:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
public class Synchronized{
public static AtomicInteger count = new AtomicInteger(0);
public static synchronized void increment() {
count.incrementAndGet();
}
public static void main(String[] args) {
ExecutorService exector = Executors.newFixedThreadPool(2);
IntStream.range(0, 1000).forEach( i -> exector.submit(Synchronized:: increment));
System.out.println(count.get());
}
}
这不会在最后打印 1000。它可以打印从 600 到 1000 的任何位置。所以看起来它不是线程安全的。有人可以解释为什么这不是线程安全的吗?
【问题讨论】:
-
你似乎没有加入/等待任何地方。
-
在打印出结果之前,您不会等待执行者完成他们的工作
标签: java multithreading concurrency java-8