我有一个名为 onTrade 的方法,定义如下,由 6 个线程调用:
public void onTrade(Trade trade) {
System.out.println(tradeCounter.incrementAndGet());
}
为什么输出:
2 5 4 3 1 6
而不是 1 2 3 4 5 6 ?
为什么不应该是输出?或者为什么不是 3 1 4 6 5 2?还是 1 2 3 4 5 6 的任何其他排列?
使用 an AtomicInteger
and itsincrementAndGet()
方法可以确保每个线程获得不同的值,并且获得的六个值是连续的,没有同步。但这与之后打印结果值的顺序无关。
如果您希望以与获取结果相同的顺序打印结果,那么同步是最简单的方法。在这种情况下,使用 anAtomicInteger
不会比使用 plain 获得任何好处int
(为此特定目的):
int tradeCounter = 0;
synchronized public void onTrade(Trade trade) {
System.out.println(++tradeCounter);
}
或者,不要担心输出的打印顺序。考虑一下:输出顺序是否真的有意义?