jdk中的Future.get()会阻塞当前主线程的运行,但不影响已经执行的其他线程

public class MyTest {
 
    public static void main(String[] args) throws Exception {
 
        ExecutorService pool = Executors.newFixedThreadPool(2);
 
        Future<Integer> f1 = pool.submit(new MyCallable(100));
        Future<Integer> f2 = pool.submit(new MyCallable(200));
        System.out.println(new Date().toLocaleString()+":执行Future.get造成主线程阻塞前");
 
        // V get()
        //f1.get()会阻塞当前主线程的运行,但不影响已经执行的其他线程
        // 例如,不影响已经执行的Future<Integer> f2 = pool.submit(new MyCallable(200));
        Integer i1 = f1.get();
        System.out.println(new Date().toLocaleString()+":f1.get()已经执行了5s");
 
        Integer i2 = f2.get();
        System.out.println(new Date().toLocaleString()+":f2.get()已经执行了10s");
 
        System.out.println(new Date().toLocaleString()+":"+i1);
 
        System.out.println(new Date().toLocaleString()+":执行Future.get造成主线程阻塞后");
 
        System.out.println(new Date().toLocaleString()+":"+i2);
 
        // 结束
        //如果不调用线程池对象的shutdown方法,当线程池里面的任务执行完毕后主线程这个JVM不会退出。
        pool.shutdown();
 
    }
 
    static class MyCallable implements Callable<Integer> {
 
        private int number;
 
        public MyCallable(int number) {
            this.number = number;
        }
 
        @Override
        public Integer call() throws Exception {
            int sum = 0;
            for (int x = 1; x <= number; x++) {
                sum += x;
            }
 
            System.out.println(new Date().toLocaleString()+":"+Thread.currentThread().getName()+"执行完成等待5s或则10s");
 
            if(number == 100){
                Thread.sleep(5000);
            }else {
                Thread.sleep(10000);
            }
 
            return sum;
        }
 
    }
}

netty中的future进行了扩展,用监听器的方式,解决了阻塞主线程的问题

——————————————————————————————————————————————————————

版权声明:本文为CSDN博主「91奔跑的蜗牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xldmx/article/details/106258036

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值