具有多个限制的线程池

hot*_*zen 5 java concurrency multithreading scala pool

我想要一个提供最多X个线程来处理任务的线程池,到目前为止没问题.但是,每个提交的任务都可以指定特定限制的IO目标(比如Y).

因此,提交的IOTask以限制4(Y)返回目标"google.com",并且池具有全局限制16(X).我想提交10个google.com-tasks,其中只有4个并行处理,并且该池有12个线程可用于其他任务.

我怎样才能做到这一点?

sha*_*ams 2

您可以将两个 ExecutorService 实例包装在自定义类中,并手动管理任务的提交,如下所示:

class ExecutorWrapper {

    private ExecutorService ioExec = Executors.newFixedThreadPool(4);
    private ExecutorService genExec = Executors.newFixedThreadPool(12);

    public Future<?> submit(final IOTask task) {
        return ioExec.submit(task);
    }

    public Future<?> submit(final Runnable task) {
        return genExec.submit(task);
    }
}

interface IOTask extends Runnable {}
Run Code Online (Sandbox Code Playgroud)

这允许您使用 4 个线程来执行 IO 操作,并让其他 12 个线程来服务其他任务。