Java多线程与For循环问题
我有个奇怪的问题 我创建并运行一个新的Java多线程与For循环问题,java,multithreading,Java,Multithreading,我有个奇怪的问题 我创建并运行一个新的线程,如下所示: for (int i = 0; i < TIMES_TO_CALL_PING; i++) { new Thread(new Runnable() { public void run() { try { Process p = Runtime.getRuntime().exec(
线程
,如下所示:
for (int i = 0; i < TIMES_TO_CALL_PING; i++) {
new Thread(new Runnable() {
public void run() {
try {
Process p = Runtime.getRuntime().exec(
"ping -l " + PACKET_SIZE + " -n "
+ TIMES_TO_PING_PER_CALL + " "
+ ADDRESS);
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String input;
while ((input = in.readLine()) != null) {
if (input.contains("time=")) {
totalPingTime += Integer.parseInt(input
.split("time=")[1].split("ms")[0]);
average = (double) (totalPingTime / index);
pingTime.setText("Average Ping Time: "
+ average + "ms");
System.out.println(index);
}
output.append(input + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
index = i;
pingCount.setText("Pings called: " + (i + 1));
frame.pack();
}
for(int i=0;i
程序的输出为:
请注意程序如何永远打印“9999”(它从不停止),以及数字的顺序如何不同,如1、2、3、4、5。为什么会这样 为了
在线程启动时捕获每个线程的变量值,请将线程实例化重写为以下内容:
class OVThread extends Thread {
int index;
public OVThread(int index, Runnable target) {
super(target);
this.index = index;
}
}
现在您可以这样使用它:
for (int i = 0; i < TIMES_TO_CALL_PING; i++) {
new OVThread(index, new Runnable() {
@Override
public void run() {
try {
...
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
...
}
for(int i=0;i
为什么您认为应该订购?您正在运行多个线程,这些线程同时打印到控制台…您需要先声明它,而不是期望我们从代码中推断您的意图。我很确定你的意图和代码所做的是两件不同的事情。你为什么要使用多线程呢?您似乎正在创建大量同时运行的线程,以及所有运行“ping”进程的线程,这些线程都将向同一地址发出ping请求。这样做有目的吗?如果不知道你希望实现什么目标,我认为我们无法真正帮助你解决问题。