初探线程池

2021-03-26 21:26

阅读:748

标签:import   ring   方式   static   任务   blocking   了解   read   led   

了解了一下线程池,先记录一下,之后还会更新

 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());
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());
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()));
64          *     }
65          *     public static ExecutorService newSingleThreadExecutor() {
66          *         return new FinalizableDelegatedExecutorService
67          *             (new ThreadPoolExecutor(1, 1,
68          *                                     0L, TimeUnit.MILLISECONDS,
69          *                                     new LinkedBlockingQueue()));
70          *     }
71          */
72         ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
73         //
74         
75     }
76 }

 

1

初探线程池

标签:import   ring   方式   static   任务   blocking   了解   read   led   

原文地址:https://www.cnblogs.com/yu-xia-zheng-ye/p/13681319.html


评论


亲,登录后才可以留言!