Java 如何让主线程不阻塞的等待结果,而是去执行其他任务,等到子线程执行完以后通知主线程?
PHP中文网
PHP中文网 2017-04-17 13:35:22
[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是可以的。

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
高洛峰

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号