ToB企服应用市场:ToB评测及商务社交产业平台

标题: 创建线程池有哪几种方式呢? [打印本页]

作者: 雁过留声    时间: 2022-8-24 18:01
标题: 创建线程池有哪几种方式呢?
转自:
http://www.java265.com/JavaJingYan/202207/16570868423908.html
下文笔者讲述创建线程池的方法分享,如下所示
  1. java原生提供创建线程池的方式如下
复制代码
  1. newSingleThreadExecutor():
  2.      它的特点在于工作线程数目被限制为1
  3.     操作一个无界的工作队列
  4.     所以它保证了所有任务的都是被顺序执行
  5.     最多会有一个任务处于活动状态
  6.      且不允许使用者改动线程池实例
  7.      因此可以避免其改变线程数目;
  8. newCachedThreadPool():
  9.      它是一种用来处理大量短时间工作任务的线程池
  10.          具有几个鲜明特点:
  11.             它会试图缓存线程并重用
  12.         当无缓存线程可用时
  13.         就会创建新的工作线程
  14.       如果线程闲置的时间超过60秒
  15.       则被终止并移出缓存
  16.         长时间闲置时,这种线程池,不会消耗什么资源
  17.      其内部使用SynchronousQueue作为工作队列
  18. newFixedThreadPool(int nThreads):
  19.      重用指定数目(nThreads)的线程
  20.      其背后使用的是无界的工作队列
  21.       任何时候最多有nThreads个工作线程是活动的
  22.     这意味着,如果任务数量超过了活动队列数目
  23.      将在工作队列中等待空闲线程出现
  24.     如果有工作线程退出
  25.      将会有新的工作线程被创建
  26.      以补足指定的数目nThreads
  27. newSingleThreadScheduledExecutor():
  28.     创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度;
  29. newScheduledThreadPool(int corePoolSize):
  30.     和newSingleThreadScheduledExecutor()类似
  31.           创建的是个 ScheduledExecutorService
  32.            可以进行定时或周期性的工作调度
  33.             区别在于单一工作线程还是多个工作线程;
  34. newWorkStealingPool(int parallelism):
  35.     这是一个经常被人忽略的线程池
  36.          Java 8 才加入这个创建方法
  37.          其内部会构建ForkJoinPool
  38.          利用Work-Stealing算法
  39.          并行地处理任务
  40.          不保证处理顺序
  41. ThreadPoolExecutor():
  42.     是最原始的线程池创建
  43.          上面1-3创建方式都是对ThreadPoolExecutor的封装
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4