我有一个简单的代码如下。这将检查服务器列表的 Activity 状态。 您能否告诉我如何使用线程或任何其他合适的解决方案并行完成此操作。
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 秒内完成。
最佳答案
使用 Java 8 流:
List<Host> aliveHosts = hosts.stream()
.parallel()
.filter(h -> {
try {
return InetAddress.getByName(h.getIpaddress()).isReachable(TIMEOUT)
} catch(Exception e) {
return false;
}
})
.collect(Collectors.toList());
关于java - 线程实现一个带有列表的for循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45208315/