当前位置: 首页 > 知识库问答 >
问题:

Java ExecutorService从Iterator读取任务

沈博延
2023-03-14

我应该创建一个从迭代器中提取下一个任务的任务吗?或者有什么更好的方法来实现这一点?

共有1个答案

司信厚
2023-03-14

一个快速的实验产生了这种效果。它当然应该展示一种方法。

我创建并运行一个ServiceFeeder,它通过execute方法向服务提供Runnables

ExecutorService service = Executors.newFixedThreadPool(10);

class ServiceFeeder implements Runnable {
    final Iterator<Runnable> i;

    public ServiceFeeder(Iterator<Runnable> i) {
        this.i = i;
    }

    @Override
    public void run() {
        while (i.hasNext()) {
            service.execute(i.next());
        }
    }
}

public void test() throws Exception {
    System.out.println("Hello world!");
    // Demo Iterator<Runnable> - use yours.
    Iterator<Runnable> i = new Iterator<Runnable>() {
        volatile int n = 0;

        @Override
        public boolean hasNext() {
            return n < 100;
        }

        @Override
        public Runnable next() {
            return () -> System.out.println(n++);
        }
    };

    ServiceFeeder feeder = new ServiceFeeder(i);
    Thread feederThread = new Thread(feeder);
    feederThread.start();
    // Wait for the feeder to stop.
    feederThread.join();
    // Wait for the service to stop.
    service.shutdown();
}

这类工作,因为它打印的远远超过我的预期,但这不是一个问题,作为一个演示imho。

 类似资料:
  • 问题内容: 我正在寻找可以提供超时的ExecutorService实现。如果提交到ExecutorService的任务花费的时间超过了超时时间,则这些任务将被中断。实现这样的野兽并不是一个困难的任务,但是我想知道是否有人知道现有的实现。 这是我根据以下一些讨论得出的。任何意见? 问题答案: 你可以为此使用ScheduledExecutorService。首先,你只提交一次即可立即开始,并保留创建的

  • 问题内容: 等待所有任务完成的最简单方法是什么?我的任务主要是计算,所以我只想运行大量的作业-每个内核上一个。现在,我的设置如下所示: 实现可运行。这似乎是正确执行的任务,但代码崩溃上用。这很奇怪,因为我玩了一些玩具示例,而且看起来很奏效。 包含数以万计的元素。我应该使用其他方法吗?我正在寻找尽可能简单的东西 问题答案: 最简单的方法是使用单行代码执行所需的操作。用你的话来说,你需要修改或包装以实

  • 我正在使用执行器服务并行运行任务。并行运行方法采用输入整数并返回整数 。由于并行任务具有返回类型,因此我使用了可调用的匿名类。您可以在下面的示例中看到 是从 executer 调用的。任务方法也有1秒的等待时间,并为抛出异常; 在下面的实现中,我使用invokeAll和isDone,并尝试收集数据。 下面的程序抛出。 未来任务迭代和检查有什么问题 isDone 和 get() 。如何处理特定调用的

  • 问题内容: 我需要一个物体。Java中是否有可用的功能可以提供此功能,或者我必须自己编写代码? 问题答案: 一种选择是使用番石榴: 这将产生不可变的字符列表,该列表由给定的字符串支持(不涉及复制)。 但是,如果最终自己做,那么我建议不要像其他许多示例那样公开实现类。我建议改为制作自己的实用程序类并公开静态工厂方法:

  • 问题内容: 我正在尝试用Java读取URL,只要URL正在浏览器中加载,它就可以工作。 但是,如果只是在浏览器中停止运行而在尝试在浏览器中打开该页面时未加载该页面,则Java应用程序会挂起,如果有足够的时间,它可能会永远等待。如果加载时间超过20秒而我停止了应用程序,如何设置超时时间? 我正在使用网址 这是代码的相关部分: 问题答案: 我不知道您如何使用URL类。如果发布摘要会更好。但是这是一种对

  • 这是http://www.gravitech.us/7segmentshield.html给出的代码。 那么怎样才能逐行阅读呢?