我定义了以下实例变量:
private final AtomicInteger tradeCounter = new AtomicInteger(0);
我有一个名为onTrade的方法,定义如下,由6个线程调用:
public void onTrade(Trade trade) {
System.out.println(tradeCounter.incrementAndGet());
}
为什么会出现以下输出:
2 5 4 3 1 6
而不是1 2 3 4 5 6?
我想避免使用同步。
发布于 2019-05-24 03:08:12
System.out.println(...)和tradeCounter.incrementAndGet()是两个独立的操作,最有可能的情况是,当线程i获得新值时,一些其他线程可以获得值并在线程打印之前打印它。这里没有办法避免同步(直接或间接)。
https://stackoverflow.com/questions/56281452
复制相似问题