了解了一下线程池,先记录一下,之后还会更新
1 import java.util.concurrent.ExecutorService; 2 import java.util.concurrent.Executors; 3 4 /** 5 * 以下是Java提供的创建线程池的四种常见方式,如果有特殊需求可使用ThreadPoolExecutor创建 6 * 7 */ 8 public class MyThreadPoolDemo { 9 public static void main(String[] args) { 10 /** 11 * 第一种方式 12 * 线程数目无限制 13 * 有空闲线程则复用,否则新建线程 14 * 优点:减少线程的创建和销毁,减少系统开销(源码指出,核心线程数目为0,非核心线程闲置60秒销毁),源码: 15 * public static ExecutorService newCachedThreadPool() { 16 * return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 17 * 60L, TimeUnit.SECONDS, 18 * new SynchronousQueue<Runnable>()); 19 * } 20 */ 21 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); 22 23 24 25 /** 26 * 第二种方式 27 *nThreds:线程最大并发数 28 * 非核心线程闲置时间为0, 29 * 超过了最大并发线程数时会将新的线程放入LinkedBlockingQueue队列等待。源码: 30 * public static ExecutorService newFixedThreadPool(int nThreads) { 31 * return new ThreadPoolExecutor(nThreads, nThreads, 32 * 0L, TimeUnit.MILLISECONDS, 33 * new LinkedBlockingQueue<Runnable>()); 34 * } 35 */ 36 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); 37 38 39 40 41 /** 42 * 第三种方式 43 * 任务队列是DelayedWorkQueue,支持定时和周期性执行任务,以下是源码 44 *public ScheduledThreadPoolExecutor(int corePoolSize) { 45 * super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, 46 * new DelayedWorkQueue()); 47 * } 48 * 49 */ 50 ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3); 51 52 53 54 /** 55 * 第四种方式 56 * 源码中第一个参数是核心线程的最大数量,第二个参数是总线程的最大数量 57 * 第三个是非核心线程闲置时间(时间一到就被销毁),第四个参数是第三个参数的单位 58 * 第五个参数是线程的任务队列,当线程数大于时,线程入队等待,该队列没有最大线程数限制,源码: 59 * public static ExecutorService newSingleThreadExecutor() { 60 * return new FinalizableDelegatedExecutorService 61 * (new ThreadPoolExecutor(1, 1, 62 * 0L, TimeUnit.MILLISECONDS, 63 * new LinkedBlockingQueue<Runnable>())); 64 * } 65 * public static ExecutorService newSingleThreadExecutor() { 66 * return new FinalizableDelegatedExecutorService 67 * (new ThreadPoolExecutor(1, 1, 68 * 0L, TimeUnit.MILLISECONDS, 69 * new LinkedBlockingQueue<Runnable>())); 70 * } 71 */ 72 ExecutorService singleThreadPool = Executors.newSingleThreadExecutor(); 73 // 74 75 } 76 }
1