JAVA中有限线程以非阻塞方式CompletableFuture运行任务

问题描述 投票:0回答:1

我定义了两个线程池,如下所示:

Executor executor = Executors.newFixedThreadPool(2);

现在我有三个任务,其中 2 个是阻塞的,其中一个是非阻塞的

CompletableFuture<Integer> blocking1  = CompletableFuture.supplyAsync(callableTask1, executor);
        CompletableFuture<Integer>blocking2 =  CompletableFuture.supplyAsync(callableTask2, executor);

        CompletableFuture<Void> nonBlocking  = CompletableFuture.runAsync(() -> {
            System.out.println("nonBlocking task's thread:  " + Thread.currentThread());
            System.out.println("Non Blocking task");

        });

callableTask1 和 callableTask2 都处于阻塞状态,因为它使线程等待。目前,要打印“非阻塞任务”,它正在等待任何阻塞任务来释放线程。我希望任何线程不等待任何任务完成并立即处理非阻塞任务。

输出应该是:

“非阻塞任务”-> 首先 “可调用任务 1”或“可调用任务 2”-> 第二个

java completable-future
1个回答
0
投票

另一个执行者服务

如果某些任务阻碍了紧迫的任务,请创建另一个执行器服务。

Executor executorPooled = Executors.newFixedThreadPool(2);
Executor executorPriority = Executors.newSingleThreadExecutor();
© www.soinside.com 2019 - 2024. All rights reserved.