码迷,mamicode.com
首页 > 编程语言 > 详细

使用和理解线程池

时间:2020-01-14 22:14:18      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:factory   family   long   时间   round   队列   方法   public   任务   

1.使用线程池的目的:

 

 线程是稀缺资源,不能频繁的创建。

 

 解耦作用;线程的创建执行完全分开,方便维护。

 

应当将其放入一个池子中,可以给其他任务进行复用

2.线程池原理:

核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用。

 

3.配置线程池:

常见的线程:

 Executors.newCachedThreadPool():无限线程池。

 Executors.newFixedThreadPool(nThreads):创建固定大小的线程池。

Executors.newSingleThreadExecutor():创建单个线程的线程池

 

public ThreadPoolExecutor(int corePoolSize,

 

                              int maximumPoolSize,

 

                              long keepAliveTime,

 

                              TimeUnit unit,

 

                              BlockingQueue<Runnable> workQueue) {

 

        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,

 

             Executors.defaultThreadFactory(), defaultHandler);

 

}

这几个核心参数的作用:

corePoolSize 为线程池的基本大小。

maximumPoolSize 为线程池最大线程大小。

keepAliveTime unit 则是线程空闲后的存活时间。

workQueue 用于存放任务的阻塞队列。

handler 当队列和最大线程池都满了之后的饱和策略

关闭线程池:

 

有运行任务自然也有关闭任务,从上文提到的 5 个状态就能看出如何来关闭线程池。

 

方法: shutdown()和shutdownNow()

 

但他们有着重要的区别:

 

shutdown() 执行后停止接受新任务,会把队列的任务执行完毕。

 

shutdownNow() 也是停止接受新任务,但会中断所有的任务,将线程池状态变为 stop

使用和理解线程池

标签:factory   family   long   时间   round   队列   方法   public   任务   

原文地址:https://www.cnblogs.com/wnlsq/p/12163712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!