我有一个程序可以向服务器发送 ping 请求。该列表很大,如果IP
无法到达,需要时间才能转到下一个IP
.
我希望,对于每一个IP
,它应该创建一个新线程并同时处理所有线程。
这是代码:
for (int i = 0; i < 89; i++)
{
ProcessBuilder processBuilder = new ProcessBuilder("ping", isWindows? "-n" : "-c", "1", buttons[i].getText());
Process proc = processBuilder.start();
returnVal = proc.waitFor();
}
我怎样才能让这个代码ping所有IP
s,每个都在一个单独的线程中?
没有怎么办ProcessBuilder
正如其他人所建议的那样。
我有三门课——PingParallel
是我的主课,PingTask
是每个线程执行的任务,并且PingResult
有结果代码(我们还可以添加更多信息,状态消息等)。
Ping并行
package com.test.thread;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class PingParallel {
public static void main(String[] args) {
int totalIps = 89;
ExecutorService executor = Executors.newFixedThreadPool(totalIps);
List<Future<PingResult>> list = new ArrayList<Future<PingResult>>();
Callable<PingResult> callable = null;
for(int i=0; i< totalIps; i++){
callable = new PingTask("127.0.0"+i); // Get the ipAddres buttons[i].getText());
Future<PingResult> future = executor.submit(callable);
list.add(future);
}
for(Future<PingResult> fut : list){
try {
System.out.println(new Date()+ "::"+fut.get());
} catch (Exception e) {
e.printStackTrace();
}
}
executor.shutdown();
}
}
PingTask
package com.test.thread;
import java.net.InetAddress;
import java.util.concurrent.Callable;
public class PingTask implements Callable<PingResult> {
private String ipAddress;
public PingTask(String ipAddress) {
this.ipAddress = ipAddress;
}
@Override
public PingResult call() {
InetAddress inet = null;
try {
inet = InetAddress.getByName(ipAddress);
int resultCode = inet.isReachable(5000) ? 0 : -1;
return new PingResult(ipAddress, resultCode);
} catch (Exception e) {
e.printStackTrace();
return new PingResult(ipAddress, -1);
}
}
}
Ping结果
package com.test.thread;
public class PingResult {
private String ipAddress;
private int resultCode;
public PingResult(String ipAddress, int resultCode) {
this.ipAddress = ipAddress;
this.resultCode = resultCode;
}
public String getIpAddress() {
return ipAddress;
}
public int getResultCode() {
return resultCode;
}
public String toString() {
return "IpAddress :: "+ ipAddress + " Result Code : "+ resultCode;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)