我想要做的是在打印数组时跟踪变量。然而,令人困惑的是它是异步的。
这与我现在的相似。
public static int variable = 0;
public void print()
{
System.out.println(array[variable]);
variable ++;
}
然后另一个具有ExecutorService和CompletionService的类异步调用print()方法,该方法运行大约40个具有4个线程的作业(在我的示例中为11个作业)。
问题(我怎么看)是因为它是异步运行的,4个线程具有相同的变量值,或者它跳过一些值,因为2个线程同时完成,因此它增加了2。
我打印出变量值,这里有一些结果:
0 1 2 2 2 2 6 6 6 9 10
0 1 2 2 4 4 6 7 8 9 10
0 1 1 1 1 5 6 7 8 8 8
答案 0 :(得分:2)
声明方法print()
已同步。
或者将变量variable
声明为AtomicInteger而不是int。
答案 1 :(得分:0)
您可以创建一个处理打印的新类:
public class SyncPrinter {
public static int variable = 0;
public static synchronized void print()
{
System.out.println(array[variable]);
variable ++;
}
}
然后将其称为SyncPrinter.print()