Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在TaskOnSucceed中调用Taskget安全吗?_Java_Concurrency_Javafx - Fatal编程技术网

Java 在TaskOnSucceed中调用Taskget安全吗?

Java 在TaskOnSucceed中调用Taskget安全吗?,java,concurrency,javafx,Java,Concurrency,Javafx,以下两个断言错误是否放置正确 final Task<String> myTask = new Task<String>() { @Override protected String call() throws Exception { return "Lorem Ipsum"; } @Override protected void succeeded() { super.succeeded();

以下两个断言错误是否放置正确

final Task<String> myTask = new Task<String>() {
    @Override
    protected String call() throws Exception {
        return "Lorem Ipsum";
    }

    @Override
    protected void succeeded() {
        super.succeeded();
        try {
            final String computedString = get();
        } catch (final InterruptedException | ExecutionException ex) {
            throw new AssertionError(
                    "Expected get() can called safely in succeeded");
        }
    }
};

myTask.setOnSucceeded(e -> {
    try {
        final String computedString = myTask.get();
    } catch (final Exception ex) {
        throw new AssertionError(
                "Expected get() can called safely in onSucceeded");
    }
});
在成功中,您可以确保get不会阻塞。也不可能获取ExecutionException,因为这样会触发失败

但是您可以得到InterruptedException,因为其他线程可以随时发送此信号

有关如何处理此特定异常的详细信息,请参见此问题:

在setOnSucceeded中调用任务将是安全的,因为在调用成功的回调时,任务已经完成,因此它不会阻塞,也不会显示任何异常

我认为调用是首选,因为它的语义似乎更简单。getValue是非阻塞的,不可能抛出InterruptedException或ExecutionException,并确保只在JavaFX应用程序线程上调用它,因此它既易于理解,又具有额外的安全检查