为了避免频繁的创建和销毁线程,减少CPU的压力,线程池就应运而生。
newFixedThreadPool()方法:该方法返回一个只有一个线程的线程池,该线程池的数量是固定始终不变。当有新任务提交时,线程池中若有空闲线程,将会立即执行。若么有空闲线程,则会被暂存在任务队列中,待有空闲线程时,才能处理任务队列的任务。
newSingleThreadExecutor()方法:该方法返回一个只有一个线程的线程池。若多余一个任务提交到线程池,会被暂存在任务队列中,待这个空闲线程时,才能处理任务队列的任务。
newCachedThreadPool()方法:该方法返回一个可以根据实际情况调整线程数据的线程池,线程池的线程数量不固定,但若有空闲线程可以复用,会优先使用可以复用的线程。若所有线程都在工作,就会创建新的线程处理任务。所有线程在当前任务中处理完毕后,将返回线程池进行复用
newSingleThreadExecutor()方法,该方法创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
newScheduledThreadPool()方法:创建一个定长线程池,支持定时及周期性任务执行。
刨根问底
无论使用哪个线程池,返回的结果不一样。但是在jdk底层都是继承了ThreadPoolExecutor。下面给出3几个线程的实现方法。jdk源码可查
public static Exe