gpt4 book ai didi

java - 线程输出错误

转载 作者:行者123 更新时间:2023-12-01 19:31:33 25 4
gpt4 key购买 nike

我想打印出每个线程的编号,即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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com