真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

一文帶你讀懂Java線程池框架

今天就跟大家聊聊有關(guān)一文帶你讀懂Java 線程池框架,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、灣里網(wǎng)站維護、網(wǎng)站推廣。

一、線程池結(jié)構(gòu)圖

一文帶你讀懂Java 線程池框架

二、示例

定義線程接口

public class MyThread extends Thread {
 @Override
 publicvoid run() {
 System.out.println(Thread.currentThread().getName() + "正在執(zhí)行");
 }
}

1:newSingleThreadExecutor

ExecutorService pool = Executors. newSingleThreadExecutor();
 Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 //將線程放入池中進行執(zhí)行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 //關(guān)閉線程池
 pool.shutdown();

輸入結(jié)果:

pool-1-thread-1正在執(zhí)行
pool-1-thread-1正在執(zhí)行
pool-1-thread-1正在執(zhí)行

2:newFixedThreadPool

ExecutorService pool = Executors.newFixedThreadPool(3);
Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 Thread t4 = new MyThread();
 Thread t5 = new MyThread();
 //將線程放入池中進行執(zhí)行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 pool.execute(t4);
 pool.execute(t5);
pool.shutdown();

輸入結(jié)果:

pool-1-thread-1正在執(zhí)行
pool-1-thread-2正在執(zhí)行
pool-1-thread-1正在執(zhí)行
pool-1-thread-2正在執(zhí)行

3 :newCachedThreadPool

ExecutorService pool = Executors.newCachedThreadPool();
 Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 Thread t4 = new MyThread();
 Thread t5 = new MyThread();
 //將線程放入池中進行執(zhí)行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 pool.execute(t4);
 pool.execute(t5);
 //關(guān)閉線程池
 pool.shutdown();

輸入結(jié)果:

pool-1-thread-2正在執(zhí)行
pool-1-thread-4正在執(zhí)行
pool-1-thread-3正在執(zhí)行
pool-1-thread-1正在執(zhí)行
pool-1-thread-5正在執(zhí)行

4 :ScheduledThreadPoolExecutor

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段時間就觸發(fā)異常
  @Override
  public void run() {
   //throw new RuntimeException();
   System.out.println("================");
  }
 }, 1000, 2000, TimeUnit.MILLISECONDS);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段時間打印系統(tǒng)時間,證明兩者是互不影響的
  @Override
  public void run() {
   System.out.println("+++++++++++++++++");
  }
 }, 1000, 2000, TimeUnit.MILLISECONDS);

輸入結(jié)果:

================
+++++++++++++++++
+++++++++++++++++
+++++++++++++++++

三、線程池核心參數(shù)

corePoolSize : 池中核心的線程數(shù)

maximumPoolSize : 池中允許的最大線程數(shù)。

keepAliveTime : 當線程數(shù)大于核心時,此為終止前多余的空閑線程等待新任務(wù)的最長時間。

unit : keepAliveTime 參數(shù)的時間單位。

workQueue : 執(zhí)行前用于保持任務(wù)的隊列。此隊列僅保持由 execute方法提交的 Runnable任務(wù)。

threadFactory : 執(zhí)行程序創(chuàng)建新線程時使用的工廠。

handler : 由于超出線程范圍和隊列容量而使執(zhí)行被阻塞時所使用的處理程序。

ThreadPoolExecutor :Executors類的底層實現(xiàn)。

3.1 任務(wù)排隊機制

SynchonousQueue: 同步隊列,隊列直接提交給線程執(zhí)行而不保持它們,此時線程池通常是無界的

LinkedBlockingQueue: 無界對列,當線程池線程數(shù)達到最大數(shù)量時,新任務(wù)就會在隊列中等待執(zhí)行,可能會造成隊列無限膨脹

ArrayBlockingQueue : 有界隊列,有助于防止資源耗盡,一旦達到上限,可能會造成新任務(wù)丟失

注意:

newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue

newCachedThreadPool 使用的是 SynchonousQueue

newScheduledThreadPool使用的是 DelayedWorkQueue

3.2 線程執(zhí)行流程

一文帶你讀懂Java 線程池框架

3.3 線程大小確定:

cpu密集型: 盡量少開線程,最佳線程數(shù) Ncpu+1

io密集型:多開線程,2Ncpu

混合型:根據(jù)情況而定,可以拆分成io密集和cou密集

看完上述內(nèi)容,你們對一文帶你讀懂Java 線程池框架有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


本文題目:一文帶你讀懂Java線程池框架
鏈接地址:http://weahome.cn/article/pcsjci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部