使用和理解线程池

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

猜你喜欢

转载自www.cnblogs.com/wnlsq/p/12163712.html