Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 如何找到线程何时完成?_Java_Multithreading - Fatal编程技术网

Java 如何找到线程何时完成?

Java 如何找到线程何时完成?,java,multithreading,Java,Multithreading,我是否需要定期调用future.get来检查任务是否已执行 ExecutorService executor = Executors.newSingleThreadExecutor(); @SuppressWarnings("unchecked") public void start(final file avo) throws IOException { Future future = executor.submit(new Callable(){ @Override

我是否需要定期调用future.get来检查任务是否已执行

ExecutorService executor = Executors.newSingleThreadExecutor();

@SuppressWarnings("unchecked")
public void start(final file avo) throws IOException
{
    Future future = executor.submit(new Callable(){

    @Override
    public Object call() throws Exception {
        Condee conv = new Condee();
        return conv.doChange(file);
    });

    LOG.debug("Finished the execution serverion");
    executor.shutdown();


}

在executor.shutdown()之前添加对此的调用


此方法仅在完成后返回。

在executor.shutdown()之前添加对此方法的调用


此方法只有在完成后才会返回。

要检查您可以使用的完成情况,需要不断检查


但是如果您使用,此方法将等待完成,然后返回结果。

要检查您可以使用的完成情况,需要不断检查


但是如果使用,此方法将等待完成,然后返回结果。

尝试使用get方法检索值。您将获得结果,否则将引发异常。以下是四种可能性,当你称之为“快进未来”时:

  • 得到结果值
  • 如果计算被取消,您将得到CancellationException (例如,调用Future.cancel(true)
  • 得到ExecutionException-如果计算引发异常
  • 如果当前线程被中断,就会得到InterruptedException 等待时(例如,调用executor.shutdownNow())

  • 尝试使用get方法检索该值。您将获得结果,否则将引发异常。以下是四种可能性,当你称之为“快进未来”时:

  • 得到结果值
  • 如果计算被取消,您将得到CancellationException (例如,调用Future.cancel(true)
  • 得到ExecutionException-如果计算引发异常
  • 如果当前线程被中断,就会得到InterruptedException 等待时(例如,调用executor.shutdownNow())

  • 你的问题需要更切中要害一点。像这样一个模棱两可的问题很可能会被关闭或删除。你需要在问题中更切题一点。像这样一个模棱两可的问题可能会被关闭或删除。我注意到,当我使用future.get()时,它阻塞了触发start方法的主线程,而不是异步执行该操作。我想异步执行start方法,您有什么建议?操作是异步执行的,但是当您调用get()时,主线程会等待其完成以获取值。如果您在主线程中还有其他事情要做(没有这个返回值),您可以直接执行并在之后调用get()。我注意到当我使用future时。get()阻塞了触发start方法的主线程,而不是异步执行操作。我想异步执行start方法,您有什么建议?操作是异步执行的,但是当您调用get()时,主线程会等待其完成以获取值。如果你在主线程中还有其他事情要做(没有这个返回值),你可以直接做,然后在之后调用get()。我对joaonlima进行了注释,因为如果我们这样做,操作不会异步进行。你能详细说明一下吗?调用future.get时,调用future.get的线程将被阻止,但启动future的线程将被执行。你在寻找什么样的行为?您想知道谁在原始问题中完成了线程?我正在从主线程调用start方法。当我使用future.get时,主线程也被阻塞。我希望start方法是异步操作的。这个创建的线程不应该通知任何人,它必须在完成后执行一个方法。当您调用future.get时,主线程是唯一被阻止的线程。执行在执行器线程中进行。我看到你已经编辑了你的问题,所以你得到的答案不再适用。你想做什么?您可以定期调用#isDone或#get并超时。但我不推荐这些轮询方法,因为它们可能会占用大量CPU。但当我不知道你的目标是什么时,很难提出不同的建议。我评论joaonlima,因为如果我们这样做,操作不会异步进行。你能详细说明吗?调用future.get时,调用future.get的线程将被阻止,但启动future的线程将被执行。你在寻找什么样的行为?您想知道谁在原始问题中完成了线程?我正在从主线程调用start方法。当我使用future.get时,主线程也被阻塞。我希望start方法是异步操作的。这个创建的线程不应该通知任何人,它必须在完成后执行一个方法。当您调用future.get时,主线程是唯一被阻止的线程。执行在执行器线程中进行。我看到你已经编辑了你的问题,所以你得到的答案不再适用。你想做什么?您可以定期调用#isDone或#get并超时。但我不推荐这些轮询方法,因为它们可能会占用大量CPU。但当我不知道你的目标是什么时,很难提出不同的建议。
    future.get();