汇总JDK自带的四个常用线程池的用法
package thread.pool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ThreadPoolUtil { static ExecutorService cachedThreadPool; static ExecutorService fixedThreadPool; static ScheduledExecutorService scheduledThreadPool; static ExecutorService singleThreadPool; static ExecutorService cachedThreadPoolRun(Runnable runnable) { if (cachedThreadPool == null) cachedThreadPool = Executors.newCachedThreadPool(); cachedThreadPool.submit(runnable); return cachedThreadPool; } public static ExecutorService fixedThreadPoolRun(Runnable runnable) { if (fixedThreadPool == null) fixedThreadPool = Executors.newFixedThreadPool(Runtime.getRuntime() .availableProcessors()); fixedThreadPool.submit(runnable); return fixedThreadPool; } public static ExecutorService scheduledThreadPoolRun(Runnable runnable, long delay, TimeUnit unit) { if (scheduledThreadPool == null) scheduledThreadPool = Executors.newScheduledThreadPool(Runtime.getRuntime() .availableProcessors()); scheduledThreadPool.schedule(runnable, delay, unit); return scheduledThreadPool; } public static ExecutorService singleThreadPoolRun(Runnable runnable) { if (singleThreadPool == null) singleThreadPool = Executors.newSingleThreadExecutor(); singleThreadPool.submit(runnable); return singleThreadPool; } public static void main(String[] args) { final Long startTime = System.currentTimeMillis(); ExecutorService executorService = null; for (int i = 0; i < 1000000; i++) { // System.out.println(finalI); final int finalI = i; Runnable task = () -> System.out.println(finalI); executorService = ThreadPoolUtil.fixedThreadPoolRun(task); } if (executorService != null) { executorService.shutdown(); } while (true) { if (executorService.isTerminated()) { System.out.println("所有的子线程都结束了!"); break; } } final Long stopTime = System.currentTimeMillis(); System.out.println("---------------------------"); System.out.println(stopTime - startTime); } }