java - 重用 Runnable 对象

标签 java multithreading runnable

有什么方法可以并行运行固定的最大数量的线程,并在其中一个线程完成后立即重用 Runnable 对象?因此,给定 Runnable obj 的 N 组运行参数并且只有 M 个 Runnable 对象(M < N)是否有一种方法可以确保一旦使用 Runnable 对象的线程之一完成,我就使用相同的线程启动一个新线程Runnable obj(因此一次最多运行 M 个线程)?

最佳答案

您可以像这样实现生产者-消费者模式:

    int n = 10;
    Executor executor = Executors.newFixedThreadPool(n);
    final BlockingQueue<Object> tasks = new ArrayBlockingQueue(1024);
    for (int i = 0; i < n; i++) {
        executor.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        Object task = tasks.take();
                        // process task
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });
    }
    tasks.put(new Object());

关于java - 重用 Runnable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29924120/

相关文章:

java - 从方法(可运行)计时器中获取对象

java - 如何在Java中循环使用多线程

java - 我怎样才能减少这个循环的执行时间(java)

javascript - Spring boot 和 Thymeleaf 应用程序 : jquery is loading but not executing

java - ArrayBlockingQueue add 方法是即时的吗?

java - 一个线程生成多个线程并在 3 个级别之前执行相同操作的设计模式或最佳实践

java - 如何快速恢复随机交换 2 个元素的递增数组?

java - 为什么用不同的类型参数多次实现一个泛型接口(interface)是不可能的?

c - Pthread 在 C 中意外执行

java - 是否有具有队列限制的 ExecutorService 实现以及用新队列成员替换旧队列成员的选项?