如何在没有其他人建议的情况下不使用ProcessBuilder.
我有三个类 – PingParallel是我的主类,PingTask是每个线程执行的任务,PingResult是结果代码(我们还可以添加更多信息,状态消息等).
PingParallel
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> list = new ArrayList>();
Callable callable = null;
for(int i=0; i< totalIps; i++){
callable = new PingTask("127.0.0"+i); // Get the ipAddres buttons[i].getText());
Future future = executor.submit(callable);
list.add(future);
}
for(Future 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 {
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);
}
}
}
PingResult
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;
}
}
本文展示了如何在Java中使用ExecutorService并发地ping多个IP地址。通过创建一个固定大小的线程池,为每个IP地址创建一个PingTask实例,并将它们提交到线程池。每个PingTask实现Callable接口,返回一个包含IP地址和可达性结果的PingResult对象。
1118

被折叠的 条评论
为什么被折叠?



