JAVA基础之线程池

一、几个比较重要的类
1.Executor接口:线程池的根接口。
2.ExecutorService接口:继承Executor,线程池常见操作接口。
3.ScheduledExecutorService接口:继承ExecutorService,添加了重复执行任务的操作。
4.ThreadPoolExecutor类:ExecutorService的默认实现。
5.ScheduledThreadPoolExecutor类:继承ThreadPoolExecutor类,并实现ScheduledExecutorService接口,是周期性任务调度的类实现。

二、Java通过Executors类提供四种线程池,分别为:
1.newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 该类返回ThreadPoolExecutor实例,corePoolSize为0;maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为60L;unit为TimeUnit.SECONDS;workQueue为SynchronousQueue(同步队列)。

2.newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 该类返回ThreadPoolExecutor实例,接收参数为所设定线程数量nThread,corePoolSize为nThread,maximumPoolSize为nThread;keepAliveTime为0L(不限时);unit为:TimeUnit.MILLISECONDS;WorkQueue为:new LinkedBlockingQueue() 无界阻塞队列。

3.newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。 FinalizableDelegatedExecutorService包装的ThreadPoolExecutor实例,corePoolSize为1;maximumPoolSize为1;keepAliveTime为0L;unit为:TimeUnit.MILLISECONDS;workQueue为:new LinkedBlockingQueue() 无界阻塞队列。

4.newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。创建ScheduledThreadPoolExecutor实例,corePoolSize为传递来的参数,maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为0;unit为:TimeUnit.NANOSECONDS;workQueue为:new DelayedWorkQueue() 一个按超时时间升序排序的队列。

备注:有的代码规范推荐用ThreadPoolExecutor手工创建线程池,而不是用Executors提供的线程池工具去创建,因为最大线程数为Integer.MAX_VALUE的线程池工具,因为可能会导致OOM。

参考链接:
自定义线程池内置线程池的使用 ThreadPoolExecutor和Executorservice 示例与注意事项 https://blog.csdn.net/qq_41358574/article/details/121852746
ExecutorService和ThreadPoolExecutor https://blog.csdn.net/qq_36898043/article/details/79732711
并发队列之无界阻塞队列LinkedBlockingQueue https://blog.csdn.net/weixin_38192427/article/details/117262033
Java四种线程池使用 https://blog.csdn.net/achuo/article/details/80623893
Java线程池种类、区别和适用场景 https://blog.csdn.net/w05980598/article/details/79425071

你可能感兴趣的:(JAVA基础之线程池)