Java 如何找到线程何时完成?
我是否需要定期调用future.get来检查任务是否已执行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
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方法检索值。您将获得结果,否则将引发异常。以下是四种可能性,当你称之为“快进未来”时:
尝试使用get方法检索该值。您将获得结果,否则将引发异常。以下是四种可能性,当你称之为“快进未来”时:
你的问题需要更切中要害一点。像这样一个模棱两可的问题很可能会被关闭或删除。你需要在问题中更切题一点。像这样一个模棱两可的问题可能会被关闭或删除。我注意到,当我使用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();