java - 线程实现一个带有列表的for循环迭代

标签 java multithreading list arraylist thread-safety

我有一个简单的代码如下。这将检查服务器列表的 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/

相关文章:

java - JButton 图像像素化

java - 按位取反给出意想不到的结果

multithreading - Python中的错误? threading.Thread.start() 并不总是返回

python-3.x - 对 PyQT GUI 的方法进行线程化

c# - 如何将 List<X> 转换为 Dictionary<X,Y> 并用 null 填充值?

java - 使用 VLC/Red5 或其他软件在网站上托管流式网络摄像头

java - 权利继承顺序

c++ - Windows 10 特定崩溃调用 LeaveCriticalSection

python - 如何删除列表中的所有奇数项?

python - 将列表解析为变量和子列表 - pythonic 方式