日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java j2se1.5_Java教程 用J2SE1.5建立多任务的Java应用程序

發(fā)布時(shí)間:2025/3/15 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java j2se1.5_Java教程 用J2SE1.5建立多任务的Java应用程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Future和FutureTask

在Java的早期版本中,查詢運(yùn)行中的線程狀態(tài),以及使線程在執(zhí)行之后返回一個(gè)值是非常困難的。由于run(運(yùn)行)方法返回void,你必須編寫大量的代碼從線程中返回一個(gè)值。使用過這種方法的程序員肯定了解其痛苦的經(jīng)歷。

你可以使用Future接口或者FutureTask類從異步執(zhí)行的線程中得到一個(gè)返回值。Future接口提供了檢查計(jì)算過程是否完成、檢索計(jì)算結(jié)果或終止計(jì)算過程的一些方法。FutureTask類提供了Future接口方法的基本實(shí)現(xiàn)(implementation)。只有計(jì)算過程完成以后才能檢索結(jié)果;如果計(jì)算過程沒有完成,get方法會被阻塞(block)。

下載代碼中的MyStringReverser.java文件演示了FutureTask類的使用,并提供了一個(gè)容易理解的示例。它以每秒鐘一個(gè)字符的速度從后向前顯示提交的字符串,同時(shí)主線程檢測事務(wù)是否完成了:

while(!future.isDone()){

System.out.println("Task not yet completed.");

try{

Thread.currentThread().sleep(500);

}catch(InterruptedException ie){

System.out.println("Will check after 1/2 sec.");

}

}

在事務(wù)完成以后,就使用get方法從Future對象中檢索結(jié)果:

System.out.println("Here is result..."+future.get());

ThreadPoolExecutor(線程池執(zhí)行器)

有了ThreadPoolExecutor類之后你可以編寫自己的服務(wù)器了。這個(gè)類為配置和調(diào)整服務(wù)器提供了很多的特性,與很多大規(guī)模的企業(yè)級EJB服務(wù)器相似。下面是它的一些配置參數(shù):

? 核心和最大的線程池大小

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

? 根據(jù)需要構(gòu)造

在默認(rèn)情況下,只有在新事務(wù)要求的時(shí)候,ThreadPoolExecutor才開始建立和啟動核心的線程,但是你可以使用prestartCoreThread或prestartAllCoreThreads動態(tài)地重載它。

? 保持活動的時(shí)間

如果線程池中當(dāng)前線程的數(shù)量超過了corePoolSize,那么這些超過的線程的空閑時(shí)間大于keepAliveTime的時(shí)候,它們就會被終止。

? 排隊(duì)

排隊(duì)遵循下面的規(guī)則:

? 如果正在運(yùn)行的線程數(shù)量少于corePoolSize,Executor總會添加新線程而不會排隊(duì)。

? 如果corePoolSize或更多數(shù)量的線程在運(yùn)行,Executor總會對請求進(jìn)行排隊(duì)而不會添加新線程。

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

? Hook方法

這個(gè)類提供了beforeExecute()和afterExecute() hook方法,它們分別在每個(gè)事務(wù)執(zhí)行之前和之后被調(diào)用。為了使用它們,你必須建立這個(gè)類的子類(因?yàn)檫@些方法是受保護(hù)的)。

下載代碼中的MyThreadPoolExecutor.java提供了一些監(jiān)視多種配置參數(shù)的詳細(xì)示例。你可以發(fā)現(xiàn)隨著每個(gè)事務(wù)的增加和完成,線程池和隊(duì)列大小在不斷變化。你可以修改代碼中的設(shè)置信息。 并發(fā)集合

JDK 1.5提供了下面一些集合實(shí)現(xiàn),它們是被設(shè)計(jì)為用于多線程環(huán)境的:

? ConcurrentHashMap

? CopyOnWriteArrayList

? CopyOnWriteArraySet

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

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

同步器(Synchronizer)

JDK 1.5還提供了一些高級類,例如Semaphore、CountDownLatch和CyclicBarrier,還有一個(gè)用于同步的Exchanger(交換器)類。本文沒有介紹這些類的詳細(xì)的分析和使用信息,因?yàn)槔斫馑鼈冃枰恍├碚摫尘啊?/p>

擁有了這些新的類之后,你可以說服害怕多線程技術(shù)的技術(shù)上司開發(fā)多線程應(yīng)用程序了。上一頁?[1]?[2]

總結(jié)

以上是生活随笔為你收集整理的java j2se1.5_Java教程 用J2SE1.5建立多任务的Java应用程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。