Java在不阻止它的情况下平行于主线程的任务



我正在尝试使用Java 8的完整图功能,该功能说它可以异步运行。但是为了执行"未来"中的内容,需要调用future.get()方法。这样做会阻止主线程。当它等待30秒时,才能在future.get()之后执行线

有没有办法实现这一目标?执行非阻止方式我正在尝试打印

"我将在主线程中运行。"

之前

"我将在单独的线程中运行比主线程。"

public static void main(String[] args) throws ExecutionException, InterruptedException {

    CompletableFuture<Void> future = CompletableFuture.runAsync(new Runnable() {
        @Override
        public void run() {
            // Simulate a long-running Job
            try {
                TimeUnit.SECONDS.sleep(30);
            } catch (InterruptedException e) {
                throw new IllegalStateException(e);
            }
            System.out.println("I'll run in a separate thread than the main thread.");
        }
    });
    future.get();
    System.out.println("I'll run in the main thread.");
}

CompletableFuture.runAsync(Runnable)已经启动您的其他线程运行。调用future.get()只是等待该线程完成运行并获得结果的一种方式,然后继续进行呼叫。

当您立即启动线程并立即进行get时,无需在(就像您一样)之间做任何事情时,没有任何意义来运行线程。

如果我正确理解的话,您要实现的目标并不是那么微不足道。您有一个输入的呼叫,并且想要处理此呼叫而不会干扰,并且在此线程的侧面,您想运行一个独立于主过程的单独过程。(如果我被误解,请纠正我)

我解决这个问题的方法是队列。您主线程在队列上发布一些内容,并执行其需要执行的内容。然后,有单独的消费者在队列上聆听,这将执行另一个过程而不会影响主线程。

最新更新