java executorservice shutdown后如何再开启么

private static final ExecutorService pool = Executors.newFixedThreadPool(threads);

 pool.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    TimeUnit.SECONDS.sleep(30);
                    System.out.println(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        
pool.shutdown();
pool.awaitTermination(60,TimeUnit.SECONDS);

//关闭之后我 会报错
//Exception in thread "main" java.util.concurrent.RejectedExecutionException
executorService.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(2);
            }
        });

原因是shutdown之后线程池无法再提交任务。有没有方法让这个线程池再打开呢?

阅读 17.8k
2 个回答

没有,这是ExecutorService接口明确规定的,关闭后不允许再打开。

建议使用CountDownLatch 倒数关闭
这种强制关闭其实是不优雅的关闭方式=.=

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