线程池的创建

Java通过Executors提供五种线程池,分别为:
1.newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
核心线程数为0,但最大线程数无限制.线程可回收复用,但已创建的线程都在工作时有 新的任务则会生成新的线程
2.newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。最大线程数等于核心线程数,不会再去创建新的线程了.
例:new newFixedThreadPool(2);
同时最多两个线程并发执行,当这两个线程空闲时才会去执行另外的任务
3.newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
4.newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
5.newWorkStealingPool 创建一个并行的线程池,参数为并行的线程数,该线程池无核心线程数和最大线程数,并且线程是无序的,谁抢到任务谁执行

参数:
corePoolSize : 表示线程池核心线程数,当初始化线程池时,会创建核心线程进入等待状态,即使它是空闲的,核心线程也不会被摧毁,从而降低了任务一来时要创建新线程的时间和性能开销。
maximumPoolSize : 表示最大线程数,意味着核心线程数都被用完了,那只能重新创建新的线程来执行任务,但是前提是不能超过最大线程数量,否则该任务只能进入阻塞队列进行排队等候,直到有线程空闲了,才能继续执行任务。
keepAliveTime : 表示线程存活时间,除了核心线程外,那些被新创建出来的线程可以存活多久。意味着,这些新的线程一但完成任务,而后面都是空闲状态时,就会在一定时间后被摧毁。
unit : 存活时间单位,没什么好解释的,一看就懂。
workQueue : 表示任务的阻塞队列,由于任务可能会有很多,而线程就那么几个,所以那么还未被执行的任务就进入队列中排队,队列我们知道是 FIFO 的,等到线程空闲了,就以这种方式取出任务。这个一般不需要我们去实现。

posted @ 2020-11-11 16:31  小耗zi  阅读(213)  评论(0)    收藏  举报