亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThreadPool:線程池

發布時間:2020-05-04 11:25:56 來源:網絡 閱讀:395 作者:ckllf 欄目:編程語言

  1、定義

  緩存一定線程數量的區域。

  2、作用

  復用、管理線程,避免新建線程/銷毀線程消耗CPU資源。

  3、核心參數

  參數  作用

  corePoolSize(核心線程數)  核心線程會一直存活

  maximumPoolSize(最大線程數)  活動線程達到最大線程數,后續新任務會阻塞

  keepAliveTime(閑置線程超時時長)  非核心線程閑置超過該時長將被回收(設置作用于核心線程threadPoolExecutor.allowCoreThreadTimeOut(true))

  unit(keepAliveTime 單位)  如:TimeUnit.MILLISECONDS, TimeUnit.SECONDS

  workQueue(任務隊列)  存放 execute() 提交的 Runnable 對象

  threadFactory(線程工廠)  為線程池創建線程,Thread newThread(Runnable r)

  4、工作流程

  

ThreadPool:線程池


  5、常用線程池

  類型  線程類型  線程數量  特點  場景

  定長線程池(FixedThreadPool)  核心線程  固定  1、核心線程空閑不會回收。2、所有線程處于活動狀態,新的任務將處于等待狀態,直到有線程空閑。3、任務隊列無大小限制。4、堆積的任務可能占用大內存  控制線程最大并發數

  定時線程池(ScheduledThreadPool)  核心、非核心線程  核心:固定,非核心:無限制  1、非核心線程閑置時會被回收。2、非核心線程無限制可能創建非常多線程。  執行定時/ 周期性任務

  可緩存線程池(CachedThreadPool)  非核心  無限制  1、優先使用閑置線程處理任務。2、線程大小無限制。3、60 秒 回收閑置線程。4、非核心線程無限制可能創建非常多線程。  執行數量多、耗時少的任務

  單線程線程池(SingleThreadExecutor)  核心線程  1個  1、任務順序執行。2、不需要處理線程同步。3、堆積的任務可能占用大內存  單線程

  6、具體使用

  public class ExecutorDemo {

  public static void main(String[] args) {

  createThreadPoolExecutor();

  createFixedThreadPool();

  createScheduledThreadPool();

  createCachedThreadPool();

  createSingleThreadExecutor();

  }

  private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();

  private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));

  private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;

  private static final int KEEP_ALIVE_SECONDS = 30;

  private static final BlockingQueue sPoolWorkQueue =

  new LinkedBlockingQueue(128);

  private static final ThreadFactory sThreadFactory = new ThreadFactory() {

  private final AtomicInteger mCount = new AtomicInteger(1);

  @Override

  public Thread newThread(Runnable r) {

  return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());

  }

  };

  public static void createThreadPoolExecutor() {

  // 1.創建自定義線程池

  ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(

  CORE_POOL_SIZE,

  MAXIMUM_POOL_SIZE,

  KEEP_ALIVE_SECONDS,

  TimeUnit.SECONDS,

  sPoolWorkQueue,

  sThreadFactory);

  threadPoolExecutor.allowCoreThreadTimeOut(true);

  // 2.創建任務

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("自定義線程池-任務執行");

  }

  };

  // 3.通過線程池執行任務

  threadPoolExecutor.execute(task);

  // 4.關閉線程池

  threadPoolExecutor.shutdown();

  }

  public static void createFixedThreadPool() {

  // 1.創建定長線程池

  // public static ExecutorService newFixedThreadPool(int var0) {

  // return new ThreadPoolExecutor(var0, var0, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue());

  // }

  ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

  // 2.創建任務

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("定長線程池-任務執行");

  }

  };

  // 3.通過線程池執行任務

  fixedThreadPool.execute(task);

  // 4.關閉線程池

  fixedThreadPool.shutdown();

  }

  public static void createScheduledThreadPool() {

  // 1.創建定時線程池

  // public ScheduledThreadPoolExecutor(int var1) {

  // super(var1, 2147483647, 0L, TimeUnit.NANOSECONDS, new ScheduledThreadPoolExecutor.DelayedWorkQueue());

  // } 無錫婦科醫院排行 http://www.0510bhyy.com/

  ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);

  // 2.創建任務

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("定時線程池-任務執行");

  }

  };

  // 3.通過線程池執行任務,execute 立即執行,schedule 延遲1s執行,scheduleAtFixedRate 延遲1s執行之后每隔2秒執行

  // scheduledThreadPool.execute(task);

  scheduledThreadPool.schedule(task, 1000L, TimeUnit.MILLISECONDS);

  // scheduledThreadPool.scheduleAtFixedRate(task,1000L,2000L, TimeUnit.MILLISECONDS);

  // 4.關閉線程池

  scheduledThreadPool.shutdown();

  }

  public static void createCachedThreadPool() {

  // 1.創建可緩存線程池

  // public static ExecutorService newCachedThreadPool() {

  // return new ThreadPoolExecutor(0, 2147483647, 60L, TimeUnit.SECONDS, new SynchronousQueue());

  // }

  ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

  // 2.創建任務

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("可緩存線程池-任務執行");

  }

  };

  // 3.通過線程池執行任務

  cachedThreadPool.execute(task);

  // 4.關閉線程池

  cachedThreadPool.shutdown();

  }

  public static void createSingleThreadExecutor() {

  // 1.創建單線程線程池

  // public static ExecutorService newSingleThreadExecutor() {

  // return new Executors.FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()));

  // }

  ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

  // 2.創建任務

  Runnable task = new Runnable() {

  @Override

  public void run() {

  System.out.println("單線程線程池-任務執行");

  }

  };

  // 3.通過線程池執行任務

  singleThreadExecutor.execute(task);

  // 4.關閉線程池

  singleThreadExecutor.shutdown();

  }

  }


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延安市| 营山县| 蕉岭县| 天祝| 井冈山市| 丽水市| 新河县| 二连浩特市| 江川县| 光山县| 综艺| 崇阳县| 竹北市| 芒康县| 常州市| 江川县| 措美县| 克东县| 凤阳县| 富顺县| 南岸区| 通许县| 忻城县| 冷水江市| 孝感市| 宜州市| 天长市| 清流县| 桦甸市| 翁牛特旗| 涿鹿县| 龙里县| 桂阳县| 仙居县| 元谋县| 岱山县| 博罗县| 廊坊市| 阜阳市| 城口县| 白水县|