首頁>Club>
2
回覆列表
  • 1 # 優就業浙江IT培訓

    多執行緒是為了能夠讓計算機資源合理的分配,對於處理不同的任務建立不同的執行緒進行處理,但是計算機建立一個執行緒或者銷燬一個執行緒所花費的也是比較昂貴的,有時候需要同時處理的事情比較多,就需要我們頻繁的進行執行緒的建立和銷燬,這樣花費的時間也是比較多的。為了解決這一問題,我們就可以引用執行緒池的概念。

    所謂執行緒池就是將執行緒集中管理起來,當需要執行緒的時候,可以從執行緒池中獲取空閒的執行緒,這樣可以減少執行緒的頻繁建立與銷燬,節省很大的時間和減少很多不必要的操作。

    在java中提供了ThreadPoolExecutor類來進行執行緒的管理,這個類繼承於AbstractExecutorService,而AbstractExecutorService實現了ExecutorService介面,我們可以使用ThreadPoolExecutor來進行執行緒池的建立。

    在ThreadPoolExecutor的構造方法中,有多個引數,可以配置不同的引數來進行最佳化。這個類的原始碼構造方法為:

    public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)其中每個引數代表的意義分別為:

    corePoolSize : 執行緒池中的核心執行緒數量,當執行緒池中當前的執行緒數小於這個配置的時候,如果有一個新的任務到來,即使執行緒池中還存在空閒狀態的執行緒,程式也會繼續建立一個新的執行緒放進執行緒池當中

    maximumPoolSize: 執行緒池中的執行緒最大數量

    keepAliveTime:當執行緒池中的執行緒數量大於配置的核心執行緒數量(corePoolSize)的時候,如果當前有空閒的執行緒,則當這個空閒執行緒可以存在的時間,如果在keepAliveTime這個時間點內沒有新的任務使用這個執行緒,那麼這個執行緒將會結束,核心執行緒不會結束,但是如果配置了allowCoreThreadTimeOut = true,則當空閒時間超過keepAliveTime之後,執行緒也會被結束調,預設allowCoreThreadTimeOut = false,即表示預設情況下,核心執行緒會一直存在於執行緒池當中。

    unit : 空閒執行緒保持連線時間(keepAliveTime)的時間單位

    workQueue:阻塞的任務佇列,用來儲存等待需要執行的任務。

    threadFactory :執行緒工廠,可以根據自己的需求去建立執行緒的物件,設定執行緒的名稱,優先順序等屬性資訊。

    handler:當執行緒池中存在的執行緒數超過設定的最大值之後,新的任務就會被拒絕,可以自己定義一個拒絕的策略,當新任務被拒絕之後,就會使用hander方法進行處理。

    在java中也提供了Executors工具類,在這個工具類中提供了多個建立執行緒池的靜態方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他們每個方法都是建立了ThreadPoolExecutor物件,不同的是,每個物件的初始 引數值不一樣;

  • 中秋節和大豐收的關聯?
  • 科技好物在人們生活及社會發展中,究竟分別扮演著怎樣的角色?