newfixedthreadpool线程池 与newCachedThreadPool 的区别

本文主要探讨了Java中两种线程池newFixedThreadPool和newCachedThreadPool的使用。示例代码展示了newFixedThreadPool的用法,该线程池创建了一个固定大小的线程池,能保证线程数量稳定,适合执行固定并发任务。而newCachedThreadPool则会根据需要创建新线程,适用于执行大量短生命周期的任务,以减少线程创建和销毁的开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。

public static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

新的线程加入后,如果正在运行的线程达到了上限,则会阻塞,直到有了空闲的线程来运行。
Java代码
 
 
import java.util.Random;    
  1. import java.util.concurrent.ExecutorService;    
  2. import java.util.concurrent.Executors;    
  3. import java.util.concurrent.TimeUnit;    
  4.   
  5. /**   
  6. * 线程池newFixedThreadPool的使用。   
  7.  
  8. */    
  9. public class ExecutorTest {    
  10. public static void main(String args[]) {    
  11. Random random = new Random();    
  12. // 建立一个容量为5的固定尺寸的线程池    
  13. ExecutorService executor = Executors.newFixedThreadPool(5);    
  14. // 判断可是线程池可以结束    
  15. int waitTime = 500;    
  16. for (int i = 0; i < 10; i++) {    
  17. String name = "线程 " + i;    
  18. int time = random.nextInt(1000);    
  19. waitTime += time;    
  20. Runnable runner = new ExecutorThread(name, time);    
  21. System.out.println("增加: " + name + " / " + time);    
  22. executor.execute(runner);    
  23. }    
  24. try {    
  25. Thread.sleep(waitTime);    
  26. executor.shutdown();    
  27. executor.awaitTermination(waitTime, TimeUnit.MILLISECONDS);    
  28. catch (InterruptedException ignored) {    
  29. }    
  30. }    
  31. }    
  32.   
  33. class ExecutorThread implements Runnable {    
  34. private final String name;    
  35. private final int delay;    
  36.   
  37. public ExecutorThread(String name, int delay) {    
  38. this.name = name;    
  39. this.delay = delay;    
  40. }    
  41.   
  42. public void run() {    
  43.   
  44. System.out.println("启动: " + name);    
  45. try {    
  46. Thread.sleep(delay);    
  47. catch (InterruptedException ignored) {    
  48. }    
  49. System.out.println("完成: " + name);    
  50. }    
  51. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值