Java 如何让主线程不阻塞的等待结果,而是去执行其他任务,等到子线程执行完以后通知主线程?

javapackage test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Main {

    public static class MyCallable implements Callable<Integer> {
        public Integer call() throws Exception {
           Thread.sleep(10000);
            return 1;
        }

    }

    public static void main(String[] args) {
        MyCallable callable = new MyCallable();
        FutureTask<Integer> task = new FutureTask<Integer>(callable);
        Thread t = new Thread(task);
        try {
            t.start();
            System.out.println(task.get());
            System.out.println("here");
        } catch (InterruptedException e) {

            e.printStackTrace();
        } catch (ExecutionException e) {

            e.printStackTrace();
        }

    }
}

当主线程在等待子线程的结果的时候,主线程本身也被阻塞了。如何做到子线程在做任务的时候,主线程去做其他的事情,等到子线程做完以后,再通知主线程去做?别说NIO。NIO是可以的。

阅读 19.6k
2 个回答

get()方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;
get(long timeout, TimeUnit unit)用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。
get方法会阻塞。知道获取结果为止。

新手上路,请多包涵

再开个线程去干活呀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题