【发布时间】:2017-07-20 07:36:22
【问题描述】:
我有一个简单的代码如下。这将检查服务器列表的活动状态。 请告诉我如何使用线程或任何其他合适的解决方案并行完成。
List<Host> hosts = this.getAllHosts();
List<Host> aliveHosts = new ArrayList<>();
if (hosts != null && hosts.size() > 0) {
for (Host host : hosts) {
try {
if(InetAddress.getByName(host.getIpaddress()).isReachable(TIMEOUT)) {
aliveHosts.add(host);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return aliveHosts;
如何在线程中调用每个getByName 并同时并行执行。目前,他们每个人的超时时间为 3 秒。如果有 10 个项目,则总时间为 30 秒。任何人都可以提供一个解决方案,以便总体上可以在 3-8 秒内完成。
【问题讨论】:
-
为每个Host创建一个新的Runnable类,设置Host参数并启动它
-
使用BlockingQueue作为共享资源,不为空时循环
-
谁能举个例子。
标签: java multithreading list arraylist thread-safety