java concurrent使用心得记载

来源:互联网 发布:江湖乐队知乎 编辑:程序博客网 时间:2024/06/06 07:25

首先看看 另外一篇日志


        ExecutorService pool = Executors.newFixedThreadPool(2);
        pool.execute( new MyTask(1) );
        pool.execute( new MyTask(2) );
        System.out.println("wait pool exit");
        try {            
            pool.shutdown();
            pool.awaitTermination( 2, TimeUnit.SECONDS );
            pool.shutdownNow();
            System.out.println("wait pool exit ok");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        上面这段代码是开启一个大小为2的线程池,执行了2个任务,注意这个组合

            pool.shutdown();
            pool.awaitTermination( 2, TimeUnit.SECONDS );
            pool.shutdownNow();

         这个是关闭线程池,并最多等待2秒,如果等待时间到还未关闭,就强行结束内部的所有任务

        注意:首先必须调用 shutdown 才能等待awaitTermination ,否则等待函数永远不会返回

                  其次,等待函数超时后,不会自行去终止未完成的任务,必须通过shutdownNow来终止

原创粉丝点击