创建线程的七种方式

newSingleThreadExecutor():

他的特点是他设定的工作线程只有1个,所有在每次线程运行时最多只有一个线程的活动状态,他保证了所有任务都是被顺序执行的,并且还不允许使用者改变线程池实例,因此就可以避免改变线程工作数

newCachedThreadPool():

他是一种处理大量短时间工作任务的线程池,他有几个特点:

  • 他会试图缓存线程并进行重用,当没有缓存线程时,就会创建新的工作线程
  • 如果线程闲置的时间超过60秒,就会将这个线程移除
  • 长时间闲置时,这种线程池不会消耗什么资源,他的内部使用SynchronousQueue作为工作队列

newFixedThreadPool(int nThreads):

重用指定数目的线程,在任何时候最多只有nThreads这个工作线程是活动的。这就意味着如果任务数量超过了可活动的数量,就会在工作队列中等待空闲线程出现,如果有工作线程退出,就会有新的工作线程被创建,以补足指定数目nThread

newSingleThreadScheduledExecutor():

创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度

newScheduledThreadPool(int corePoolSize):

和创建但线程池是一样的,创建的是ScheduledExecutorService,都可以进行定时或者是周期性的工作调度,但是区别在于单一线程还是多线程

newWorkStealingPool(int parallelism):

这是一个经常被忽略的线程池,他是在Java 8 才加入的这个创建方法,他的内部会构建ForkJoinPool,然后利用Work-Stealing算法,进行处理任务,但是不保证处理顺序

ThreadPoolExecutor():

是最原始的线程创建,newSingleThreadExecutor、newCachedThreadPool、newFixedThreadPool(int nThreads)都是对ThreadPoolExecutor进行封装的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值