JavaFX:使用执行器在线程池中 运行 时任务的可返回值

JavaFX: Returnable values of Tasks when ran in thread pool using Executor

我有一个Task要执行,并提交到缓存线程池ExecutorService。它 运行 顺利,但我需要能够检索它的可返回值。这怎么可能?

示例代码:

ExecutorService threadPool = Executors.newCachedThreadPool(runnableTask -> {
    Thread thread = new Thread(runnableTask);
    thread.setDaemon(true);
    return thread;
});
Button btn = new Button("Run Task");
btn.setOnAction(actionEvent -> {
    try {
        Object get = threadPool.submit(new Task<String>() {
            @Override
            protected String call() throws Exception {
                //simulating long-running task
                    Thread.sleep(3_000);
                //return result
                    return "Warren Nocos";
            }
        }).get();
        System.out.println(get);
    } catch (InterruptedException | ExecutionException ex) {
        logger.log(Level.SEVERE, ex.getMessage(), ex);
    }
});

输出为空。

使用 onSucceeded() 回调(它将在 JavaFX 应用程序线程上执行):

Button btn = new Button("Run Task");
btn.setOnAction(actionEvent -> {
    Task<String> task = new Task<String>() {
        @Override
        protected String call() throws Exception {
            //simulating long-running task
                Thread.sleep(3_000);
            //return result
                return "Warren Nocos";
        }
    };
    task.setOnSucceeded(event -> {
        String result = task.getValue();
        System.out.println(result);
    });
    task.setOnFailed(event -> {
        task.getException().printStackTrace();
    });
    threadPool.execute(task);
});