ThreadPoolExecutor类的几个常用方法:
execute(Runnable command):提交接受到的任务。
shutdown():队列不在接受新的任务,线程池内的任务执行完后,关闭线程池。
shutdownNow():队列不接受新的任务,并且队列内任务移除,并尝试停止正在执行的任务,关闭线程池。
ThreadPoolExecutor类让我们能自主定义出需要的各种线程池,但是每次使用线程池的时候,不想搞这么多参数怎么办?于是Java提供了4中常见的线程池供我们直接使用(通过Executors类创建):
CachedThreadPool(可缓存线程池)
ExecutorService cachedThreadPool=Executor.newCachedThreadPool();
源码:
规则:1.线程数量无限制
2.有空闲线程用空闲线程,无空闲线程则新建线程。
FixedThreadPool(定长线程池)
ExecutorService fixedThreadPool=Executors.newFixedThreadPool(int nThread);
源码:
规则:1.控制线程最大并发数(即同时执行的线程)
2.超出的线程在队列中等待。
SingleThreadExecutor(单线程化的线程池)
ExecutorService singleThreadExecutor=Executors.newSingleThreadExecutor();
源码:
规则:1.有且只有一个线程执行。
2.任务根据入队列规则执行,即先入队列先执行。
ScheduledThreadPool(调度型线程池)
ExecutorService scheduledThreadPool=Executors.newScheduledThreadPool(int corePoolSize);
源码:
规则:1.一定时间后执行或周期性执行。
不难发先,这些常用的线程池其实就是变相调用ThreadPoolExecutor类, 所以说要是没有我们想要的,还是老老实实的写吧。
线程池添加任务有submit和execute,它们的区别:
1.接受的参数不一样
2.submit有返回值
3.execute是Executor接口中唯一定义的方法,submit是ExecutorService接口定义的方法(该接口继承Executor接口) |