我有一个简单的实用程序,它 ping 一组节点并将字符串的 ArrayList 返回到将来的对象以输出到文件。该程序应该一直运行到用户终止。
未来似乎没有收到结果(或至少将它们传递给方法以输出到文件)。无论我同时运行的线程数(总是小于 100,由输入文件确定),我只输出第一个和最后一个初始化线程的结果。
作为健全性检查,我创建了一个全局变量,每个线程将在其中发送其结果,然后关闭并将其结果返回给 Future 对象。此变量由所有线程正确更新。
有谁知道为什么 Future 似乎没有从线程中收到我所有的结果?
public class PingUtility{
public static ExecutorService pool = Executors.newFixedThreadPool(100);
static Future<ArrayList<String>> future;
public static void main(String[] args) throws Exception {
Timer timer = new Timer();
TimerTask task = new TimerTask(){
public void run(){
//Creates a pool of threads to be executed
ArrayList<String[]> nodes = new ArrayList<String[]>()
future = pool.submit(new PingNode(nodes));
}
}
};
timer.scheduleAtFixedRate(task, 0, interval);
while(true){
try{
ArrayList<String[]> tempOutputArray = future.get();
Iterator<String[]> it = tempOutputArray.iterator();
while(it.hasNext()) appendFile(it.next());
tempOutputArray.clear();
}catch(Exception nullException){
//Do nothing
}
}
}