我想打印出每个线程的编号,即1,2,3..
。无论输出数字的顺序如何,但是当我运行下面的代码时,输出中重复了许多数字
public static int ThreadNumber = 0;
for (int i = 0; i <= 8; i++) {
new Thread(() -> {
System.out.println("Thread number : " + ThreadNumber);
}).start();
ThreadNumber++;
}
输出:
Thread number : 3
Thread number : 3
Thread number : 4
Thread number : 5
Thread number : 6
Thread number : 9
Thread number : 9
Thread number : 9
Thread number : 9
如何解决此问题,以便每个线程仅输出特定数字
最佳答案
避免可变的全局状态(“静态”)。
要将值传递给 lambda 表达式,请将其分配给有效的最终局部变量。目前还不需要升级到整个类(class)。
int threadNumber = 0;
for (int i = 0; i <= 8; i++) {
int thisThread = threadNumber;
new Thread(() -> {
System.out.println("Thread number : " + thisThread);
}).start();
++threadNumber; // Just i in this case.
}
显然,无法保证打印的顺序 - 这就是线程的要点。
关于java - 线程输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59688210/