zoukankan      html  css  js  c++  java
  • 初探线程池

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

     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

  • 相关阅读:
    ORACLE锁表问题
    迅雷极速版解决版本太旧提示问题
    迅雷极速版任务出错的解决办法(亲测可用)
    百度文库免积分免费下载工具的原理与实现
    C#启动另一个应用程序并传参数
    C#设置WebBrowser IE浏览器版本
    JS强制刷新页面、清除缓存刷新
    JS播放声音
    Chrome插件(扩展)开发全攻略
    IIS7.5全站301跳转,内页+带参数url,这才是真正的全站跳转
  • 原文地址:https://www.cnblogs.com/yu-xia-zheng-ye/p/13681319.html
Copyright © 2011-2022 走看看