程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 用J2SE1.5來實現多任務的Java應用程序(2)

用J2SE1.5來實現多任務的Java應用程序(2)

編輯:J2SE

有了ThreadPoolExecutor類之後你可以編寫自己的服務器了。這個類為配置和調整服務器提供了很多的特性,與很多大規模的企業級EJB服務器相似。下面是它的一些配置參數:

核心和最大的線程池大小

通過把corePoolSize和maximumPoolSize設置為相同的值,你就可以建立一個大小固定的線程池了。通過把maximumPoolSize設置為一個極大的值(例如Integer.MAX_VALUE),你就可以允許線程池容納任意數量的並發事務了。

根據需要構造

在默認情況下,只有在新事務要求的時候,ThreadPoolExecutor才開始建立和啟動核心的線程,但是你可以使用prestartCoreThread或prestartAllCoreThreads動態地重載它。

保持活動的時間

如果線程池中當前線程的數量超過了corePoolSize,那麼這些超過的線程的空閒時間大於keepAliveTime的時候,它們就會被終止。

排隊

排隊遵循下面的規則:

如果正在運行的線程數量少於corePoolSize,Executor總會添加新線程而不會排隊。

如果corePoolSize或更多數量的線程在運行,Executor總會對請求進行排隊而不會添加新線程。

如果某個請求不能參與排隊,就會建立新線程,除非線程數量超過了maximumPoolSize(在超過的情況下,該事務會被拒絕)。

Hook方法

這個類提供了beforeExecute()和afterExecute() hook方法,它們分別在每個事務執行之前和之後被調用。為了使用它們,你必須建立這個類的子類(因為這些方法是受保護的)。

下載代碼中的MyThreadPoolExecutor.Java提供了一些監視多種配置參數的詳細示例。你可以發現隨著每個事務的增加和完成,線程池和隊列大小在不斷變化。你可以修改代碼中的設置信息。 並發集合

JDK 1.5提供了下面一些集合實現,它們是被設計為用於多線程環境的:

ConcurrentHashMap

CopyOnWriteArrayList

CopyOnWriteArraySet

ConcurrentHashMap類為檢索和更新(update)可調整的預期的並發性提供了完整的線程安全的(thread-safe)並發性支持。CopyOnWriteArraySet是一組線程安全的變量集合,CopyOnArrayList是一個線程安全的數組列表(ArrayList)變量。在修改原始的數組或集合之前,它們中的每一個都會把下層的數組或集合復制一份。其結果是,讀取的速度很快,而更新的速度很慢。

並發集合類為Iterator(迭代子)提供快照式的數據(即使下層數據發生了改變,在Iterator中也不會反映出來)。

同步器(Synchronizer)

JDK 1.5還提供了一些高級類,例如Semaphore、CountDownLatch和CyclicBarrIEr,還有一個用於同步的Exchanger(交換器)類。本文沒有介紹這些類的詳細的分析和使用信息,因為理解它們需要一些理論背景。

擁有了這些新的類之後,你可以說服害怕多線程技術的技術上司開發多線程應用程序了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved