1、Executors.newFixedThreadPool(5) 是创建一个线程池,池子里面有5个线程,任务数多余5个时,超出的任务队列中排队等候执行
2、Executors.newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
3、Executors.newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
注::FIFO: 全称First in, First out,先进先出。 LIFO: 全称Last in, First out,后进先出。
importjava.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @author liugao * * 2018年6月8日-上午10:18:15 */ public class ThreadPoolTest { /** * @param args */ public static void main(String[] args) { // ExecutorService threadPool = Executors.newCachedThreadPool(); // ExecutorService threadPool = Executors.newSingleThreadExecutor(); ExecutorService threadPool = Executors.newFixedThreadPool(5);// 创建一个线程池 for (int i = 0; i < 10; i++) { final int task = i; threadPool.execute(new Runnable() { //往池子里面丢10次任务 @Override public void run() { for (int j = 0; j <= 3; j++) { System.out.println("当前线程名:" + Thread.currentThread().getName()+"####当前任务是:"+ task); } } }); } threadPool.shutdown(); } }
线程池用完之后记得shutdown
4、Executors.newScheduledThreadPool(2); 可以延迟执行,除了延迟执行外,跟newFixedThreadPool基本一样
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * @author liugao * * 2018年6月8日-上午10:18:15 */ public class ThreadPoolTest { /** * @param 6秒后炸一次,之后每隔2秒炸一次 */ public static void main(String[] args) { ScheduledExecutorService ScheduledThreadPool = Executors.newScheduledThreadPool(2); ScheduledThreadPool.scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("booming!"); } }, 6, 2, TimeUnit.SECONDS); } }当第一个任务执行完成之后,延迟指定时间再开始执行第二个任务