线程池的两种关闭方式以及区别

  今天看书,看到线程池的关闭方式,记个笔记

  
  线程池大家都知道,用来实现资源复用的。避免了线程频繁的创建和销毁的开销。待到使用完毕后都要关闭线程池,以释放资源。
  

  线程池关闭后里面有任务正在工作的线程会怎么样

  
  在书上有这么一段:
  可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。它们的原理是遍历线 程池中的工作线程,然后逐个调用线程的interrupt方法来中断线程,所以无法响应中断的任务 可能永远无法终止。但是它们存在一定的区别,shutdownNow首先将线程池的状态设置成 STOP,然后尝试停止所有的正在执行或暂停任务的线程,并返回等待执行任务的列表,而 shutdown只是将线程池的状态设置成SHUTDOWN状态,然后中断所有没有正在执行任务的线程。
  
  只要调用了这两个关闭方法中的任意一个,isShutdown方法就会返回true。当所有的任务 都已关闭后,才表示线程池关闭成功,这时调用isTerminaed方法会返回true。至于应该调用哪 一种方法来关闭线程池,应该由提交到线程池的任务特性决定,通常调用shutdown方法来关闭 线程池,如果任务不一定要执行完,则可以调用shutdownNow方法。
  

  总结

  
  线程池有两种关闭方法(shutdownNow和shutdown),shutdownNow会首先将线程池的状态设置成 STOP,然后尝试停止所有的正在执行或暂停任务的线程;shutdown只是将线程池的状态设置成SHUTDOWN状态,然后中断所有没有正在执行任务的线程。
  
  我的理解是shutdownNow方法不管线程池中的线程在不在工作,会尝试关闭所有线程,shutdown方法只会关闭没有工作的线程会等待有工作的线程执行完毕。但是只有等所有线程都不在工作并且被成功中断后线程池才会真正意义上的关闭。

  

  以上是我的理解,不一定对,欢迎大佬指正,告辞。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中实现线程池方式两种:ThreadPoolExecutor 和 Executors 工厂类。 1. ThreadPoolExecutor ThreadPoolExecutor 是 Java 中最基本的线程池实现类。具体步骤是: 1)创建 ThreadPoolExecutor 对象,并设置线程池的基本参数,如核心线程数、最大线程数、线程存活间、任务队列等; 2)将任务提交给线程池线程池会自动执行任务。 例如: ``` ThreadPoolExecutor executor = new ThreadPoolExecutor( 5, // 核心线程数 10, // 最大线程数 60, // 线程存活间,单位秒 TimeUnit.SECONDS, // 存活间的单位 new ArrayBlockingQueue<>(100) // 任务队列 ); executor.execute(new Runnable() { @Override public void run() { // 线程执行的代码 } }); executor.shutdown(); // 关闭线程池 ``` 2. Executors 工厂类 Executors 是 Java 中提供的一个线程池工厂类,可以快速创建不同类型的线程池。具体步骤是: 1)使用 Executors 工厂类的静态方法创建不同类型的线程池,如 newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor 等; 2)将任务提交给线程池线程池会自动执行任务。 例如: ``` ExecutorService executor = Executors.newFixedThreadPool(5); executor.execute(new Runnable() { @Override public void run() { // 线程执行的代码 } }); executor.shutdown(); // 关闭线程池 ``` 需要注意的是,Executors 工厂类虽然方便,但在某些情况下会导致一些问题,如线程池的队列过长、线程数过多等。因此,建议使用 ThreadPoolExecutor 类进行线程池的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值