我定义了两个线程池,如下所示:
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”-> 第二个
如果某些任务阻碍了紧迫的任务,请创建另一个执行器服务。
Executor executorPooled = Executors.newFixedThreadPool(2);
Executor executorPriority = Executors.newSingleThreadExecutor();