<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. java語言

    java線程池框架是什么

    時間:2025-01-11 15:27:26 java語言 我要投稿
    • 相關推薦

    java線程池框架是什么

      多線程是程序員面試時常常會面對的問題,對多線程概念的掌握和理解水平,也常常被用來衡量一個人的編程實力。不錯,普通的多線程已經不容易了。以下是小編為大家搜索整理java線程池框架是什么,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

      一、線程池結構圖

      二、示例

      定義線程接口

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

      1:newSingleThreadExecutor

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

      輸入結果:

      3pool-1-thread-1正在執行pool-1-thread-1正在執行pool-1-thread-1正在執行

      2:newFixedThreadPool

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

      輸入結果:

      4pool-1-thread-1正在執行pool-1-thread-2正在執行pool-1-thread-1正在執行pool-1-thread-2正在執行

      3 :newCachedThreadPool

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

      輸入結果:

      5pool-1-thread-2正在執行pool-1-thread-4正在執行pool-1-thread-3正在執行pool-1-thread-1正在執行pool-1-thread-5正在執行

      4 :ScheduledThreadPoolExecutor

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

      輸入結果:

      4================+++++++++++++++++++++++++++++++++++++++++++++++++++

      三、線程池核心參數

      corePoolSize : 池中核心的線程數

      maximumPoolSize : 池中允許的最大線程數。

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

      unit : keepAliveTime 參數的時間單位。

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

      threadFactory : 執行程序創建新線程時使用的工廠。

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

      ThreadPoolExecutor :Executors類的底層實現。

      3.1 任務排隊機制

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

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

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

      注意:

      newSingleThreadExecutor、newFixedThreadPool使用的是LinkedBlockingQueue

      newCachedThreadPool 使用的是 SynchonousQueue

      newScheduledThreadPool使用的是 DelayedWorkQueue

      3.2 線程執行流程

      3.3 線程大小確定:

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

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

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

    【java線程池框架是什么】相關文章:

    什么是java線程池框架10-02

    java線程池框架解析09-11

    java線程池框架解析方法10-13

    Java 5線程池使用07-28

    java中通用的線程池實例代碼08-27

    java主線程是什么05-20

    java的多線程09-09

    java多線程08-31

    Java多線程的線程守護例子06-08

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人