999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于J2SE5.0的對(duì)象池組件設(shè)計(jì)

2008-01-01 00:00:00張俊暉
考試周刊 2008年1期

摘要:Java 2 Standard Edtion 5.0(代號(hào)Tiger)是Sun Microsystems公司最新發(fā)布的Java2平臺(tái)標(biāo)準(zhǔn)版。在J2SE5.0中提供了java.util.concurrent包。這個(gè)包實(shí)現(xiàn)了JSR166中描述的并發(fā)編程(concurrent programming)模型。

本課題中將通過(guò)使用J2SE5.0中的concurrent包實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的對(duì)象池來(lái)對(duì)J2SE5.0并發(fā)控制效率進(jìn)行研究,并將實(shí)現(xiàn)的對(duì)象池應(yīng)用在Web程序當(dāng)中,構(gòu)建一個(gè)擴(kuò)展Struts框架的Web程序框架。

本文分兩個(gè)個(gè)主要部分講解。第一部分講述了開(kāi)發(fā)對(duì)象池及Web框架鎖必備的知識(shí),重點(diǎn)講述Java語(yǔ)言及UML建模;第二部分講述了對(duì)象池組件的系統(tǒng)設(shè)計(jì),包括需求分析,組件設(shè)計(jì)等。

關(guān)鍵詞:對(duì)象池 UML建模 Sturts框架

1 基本理論

1.1 Java語(yǔ)言簡(jiǎn)介

Java是1995年6月由Sun Microsystems公司提出的一種革命化語(yǔ)言,與其他編程語(yǔ)一樣,這種語(yǔ)言在短時(shí)間內(nèi)即得到了迅速的發(fā)展。由于具有易用性、平臺(tái)無(wú)關(guān)性、易移植性等諸多特征,這門(mén)語(yǔ)言得到了廣泛的應(yīng)用。而且,這種語(yǔ)言具有很好的發(fā)展前景:程序開(kāi)發(fā)費(fèi)用少,工作效率高,并擁有很好的用戶(hù)界面和強(qiáng)大的開(kāi)發(fā)工具。網(wǎng)上數(shù)據(jù)編程體現(xiàn)得非常充分,是其它語(yǔ)言無(wú)法做到的。

1.2 UML技術(shù)

1.2.1 UML簡(jiǎn)介

統(tǒng)一建模語(yǔ)言(UML)是一個(gè)通用的可視化建模語(yǔ)言,用于對(duì)軟件進(jìn)行描述、可視化處理、構(gòu)造和建立軟件系統(tǒng)制品的文檔。它記錄了對(duì)必須構(gòu)造的系統(tǒng)的決定和理解,可用于對(duì)系統(tǒng)的理解、設(shè)計(jì)、瀏覽、配置、維護(hù)和信息控制。

UML描述了一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為。UML將系統(tǒng)描述為一些離散的相互作用的對(duì)象,并最終為外部用戶(hù)提供一定的功能的模型結(jié)構(gòu)。靜態(tài)結(jié)構(gòu)定義了系統(tǒng)中的重要對(duì)象的屬性和操作,以及這些對(duì)象之間的相互關(guān)系。動(dòng)態(tài)行為定義了對(duì)象的時(shí)間特性和對(duì)象為完成目標(biāo)而相互進(jìn)行通信的機(jī)制。從不同但相互聯(lián)系的角度對(duì)系統(tǒng)建立的模型可用與不同的目的。

1.2.2 UML圖

1.2.2.1 類(lèi)圖

類(lèi)圖表示不同的實(shí)體(人、事物和數(shù)據(jù))如何彼此相關(guān),換句話說(shuō),它顯示了系統(tǒng)的靜態(tài)結(jié)構(gòu)。類(lèi)圖可用于表示邏輯類(lèi),邏輯類(lèi)通常就是業(yè)務(wù)人員所談及的事物種類(lèi)——搖滾樂(lè)隊(duì)、CD、廣播劇;或者貸款、住房抵押、汽車(chē)信貸以及利率。類(lèi)圖還可用于表示實(shí)現(xiàn)類(lèi),實(shí)現(xiàn)類(lèi)就是程序員處理的實(shí)體。實(shí)現(xiàn)類(lèi)圖或許會(huì)與邏輯類(lèi)圖顯示一些相同的類(lèi)。然而,實(shí)現(xiàn)類(lèi)圖不會(huì)使用相同的屬性來(lái)描述,因?yàn)樗芸赡芫哂袑?duì)諸如Vector和HashMap這種事物的引用。

1.2.2.2 狀態(tài)圖

狀態(tài)圖表示某個(gè)類(lèi)所處的不同狀態(tài)和該類(lèi)的狀態(tài)轉(zhuǎn)換信息。有人可能會(huì)爭(zhēng)論說(shuō)每個(gè)類(lèi)都有狀態(tài),但不是每個(gè)類(lèi)都應(yīng)該有一個(gè)狀態(tài)圖。只對(duì)“感興趣的”狀態(tài)的類(lèi)(也就是說(shuō),在系統(tǒng)活動(dòng)期間具有三個(gè)或更多潛在狀態(tài)的類(lèi))才進(jìn)行狀態(tài)圖描述。

1.2.2.3 活動(dòng)圖

活動(dòng)圖表示在處理某個(gè)活動(dòng)時(shí)兩個(gè)或者更多類(lèi)對(duì)象之間的過(guò)程控制流。活動(dòng)圖可用于在業(yè)務(wù)單元的級(jí)別上對(duì)更高級(jí)別的業(yè)務(wù)過(guò)程進(jìn)行建模,或者對(duì)低級(jí)別的內(nèi)部類(lèi)操作進(jìn)行建模。根據(jù)我的經(jīng)驗(yàn),活動(dòng)圖最適合用于對(duì)較高級(jí)別的過(guò)程建模,比如公司當(dāng)前在如何運(yùn)作業(yè)務(wù),或者業(yè)務(wù)如何運(yùn)作等。這是因?yàn)榕c序列圖相比,活動(dòng)圖在表示上“不夠技術(shù)性”,但有業(yè)務(wù)頭腦的人們往往能夠更快速地理解它們。

1.2.2.4 序列圖

序列圖顯示具體用例(或者是用例的一部分)的詳細(xì)流程。它幾乎是自描述的,并且顯示了流程中不同對(duì)象之間的調(diào)用關(guān)系,同時(shí)還可以很詳細(xì)地顯示對(duì)不同對(duì)象的不同調(diào)用。

序列圖有兩個(gè)維度:垂直維度以發(fā)生的時(shí)間順序顯示消息/調(diào)用的序列;水平維度顯示消息被發(fā)送到的對(duì)象實(shí)例。

1.2.2.5 組件圖

組件圖提供系統(tǒng)的物理視圖。它的用途是顯示系統(tǒng)中的軟件對(duì)其他軟件組件(例如,庫(kù)函數(shù))的依賴(lài)關(guān)系。

1.2.2.6 用例圖

用例圖描述了系統(tǒng)提供的一個(gè)功能單元。用例圖的主要目的是幫助開(kāi)發(fā)團(tuán)隊(duì)以一種可視化的方式理解系統(tǒng)的功能需求,包括基于基本流程的“角色”(actors,也就是與系統(tǒng)交互的其他實(shí)體)關(guān)系,以及系統(tǒng)內(nèi)用例之間的關(guān)系。用例圖一般表示出用例的組織關(guān)系——要么是整個(gè)系統(tǒng)的全部用例,要么是完成具體功能(例如所有安全管理相關(guān)的用例)的一組用例。要在用例圖上顯示某個(gè)用例,可繪制一個(gè)橢圓,然后將用例的名稱(chēng)放在橢圓的中心或橢圓下面的中間位置;要在用例圖上繪制一個(gè)角色(表示一個(gè)系統(tǒng)用戶(hù)),可繪制一個(gè)人形符號(hào)。角色和用例之間的關(guān)系使用簡(jiǎn)單的線段來(lái)描述。

1.2.2.7 部署圖

部署圖表示該軟件系統(tǒng)如何部署到硬件環(huán)境中。它的用途是顯示該系統(tǒng)不同的組件將在何處物理地運(yùn)行,以及它們將如何彼此通信。因?yàn)椴渴饒D是對(duì)物理運(yùn)行情況進(jìn)行建模,系統(tǒng)的生產(chǎn)人員就可以很好地利用這種圖。

1.3 開(kāi)發(fā)工具Eclipse

Eclipse是一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。Eclipse本身附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具(Java Development Tools,JDT)。

Eclipse是一個(gè)很讓人著迷的開(kāi)發(fā)環(huán)境,它提供的核心框架和可擴(kuò)展的插件機(jī)制給廣大的程序員提供了無(wú)限的想象和創(chuàng)造空間。目前網(wǎng)上流傳相當(dāng)豐富且全面的開(kāi)發(fā)工具方面的插件,但是Eclipse已經(jīng)超越了開(kāi)發(fā)環(huán)境的概念,可以想象Eclipse將成為未來(lái)的集成的桌面環(huán)境。目前的Eclipse本身就具備資源管理和外部程序的功能,加上無(wú)所不能的插件,將構(gòu)成一個(gè)豐富多彩的工作環(huán)境而不僅僅是一個(gè)IDE。

2 對(duì)象池組件分析與概要設(shè)計(jì)

2.1 概要

恰當(dāng)?shù)厥褂脤?duì)象池化技術(shù),可以有效地減少對(duì)象生成和初始化時(shí)的消耗,提高系統(tǒng)的運(yùn)行效率。

對(duì)象池化的基本思路是:將用過(guò)的對(duì)象保存起來(lái),等下一次需要這種對(duì)象的時(shí)候,再拿出來(lái)重復(fù)使用,從而在一定程度上減少頻繁創(chuàng)建對(duì)象所造成的開(kāi)銷(xiāo)。用于充當(dāng)保存對(duì)象的“容器”的對(duì)象,被稱(chēng)為“對(duì)象池”(Object Pool,或簡(jiǎn)稱(chēng)Pool)。

對(duì)于沒(méi)有狀態(tài)的對(duì)象(例如String),在重復(fù)使用之前,無(wú)需進(jìn)行任何處理;對(duì)于有狀態(tài)的對(duì)象(例如StringBuffer),在重復(fù)使用之前,就需要把它們恢復(fù)到等同于剛剛生成時(shí)的狀態(tài)。由于條件的限制,恢復(fù)某個(gè)對(duì)象的狀態(tài)的操作不可能實(shí)現(xiàn)了的話,就得把這個(gè)對(duì)象拋棄,改用新創(chuàng)建的實(shí)例了。

并非所有對(duì)象都適合拿來(lái)池化——因?yàn)榫S護(hù)對(duì)象池也要造成一定開(kāi)銷(xiāo)。對(duì)生成時(shí)開(kāi)銷(xiāo)不大的對(duì)象進(jìn)行池化,反而可能會(huì)出現(xiàn)“維護(hù)對(duì)象池的開(kāi)銷(xiāo)”大于“生成新對(duì)象的開(kāi)銷(xiāo)”,從而使性能降低的情況。但是對(duì)于生成時(shí)開(kāi)銷(xiāo)可觀的對(duì)象,池化技術(shù)就是提高性能的有效策略了。

2.2 需求分析

2.2.1 對(duì)象池組件功能需求

對(duì)象池為客戶(hù)線程提供取得對(duì)象的方法getObject,歸還對(duì)象的方法releaseObject和銷(xiāo)毀對(duì)象的方法invalidateObject。

圖1 是客戶(hù)線程從池中取對(duì)象時(shí)的序列圖,當(dāng)客戶(hù)線程取對(duì)象時(shí)對(duì)象池根據(jù)情況去從池中取對(duì)象或調(diào)用Factory創(chuàng)建一個(gè)對(duì)象。在取對(duì)象同時(shí)對(duì)象持還會(huì)根據(jù)設(shè)置調(diào)用Factory對(duì)對(duì)象進(jìn)行檢查,激活或狀態(tài)復(fù)原。

圖2是客戶(hù)線程將對(duì)象送回對(duì)象池中時(shí)的序列圖,當(dāng)客戶(hù)線程送回對(duì)象到對(duì)象池時(shí)。在取對(duì)象同時(shí)對(duì)象池還會(huì)根據(jù)設(shè)置調(diào)用Factory對(duì)對(duì)象進(jìn)行檢查和狀態(tài)復(fù)原。

圖3是客戶(hù)進(jìn)程銷(xiāo)毀一個(gè)對(duì)象時(shí)的序列圖。當(dāng)客戶(hù)線程銷(xiāo)毀對(duì)象時(shí),對(duì)象池將調(diào)用Factory的destroyObject方法將對(duì)象破壞掉。

2.2.2 對(duì)象池(ObjectPool)組件性能需求

對(duì)對(duì)象池的要求如下:

1) 對(duì)象池組件運(yùn)行在多線程環(huán)境下,要考慮對(duì)象池的線程安全性;

2) 對(duì)象池提供三種(increasing,bloking,blockingtimeout)取得對(duì)象的方法;

3) 對(duì)象池在創(chuàng)建時(shí)對(duì)其初始化,并可以在對(duì)象池運(yùn)行過(guò)程中可以修改運(yùn)行參數(shù);

4) 在對(duì)象池內(nèi)部使用泛型(Generics)技術(shù)為各種類(lèi)型對(duì)象構(gòu)造一個(gè)通用的pool。

2.3 開(kāi)發(fā)環(huán)境配置

2.3.1 硬件環(huán)境

2.3.2 軟件環(huán)境

1) 開(kāi)發(fā)環(huán)境

2) 運(yùn)行環(huán)境

2.4 系統(tǒng)設(shè)計(jì)

2.4.1 對(duì)象池(ObjectPool)組件

創(chuàng)建PoolableObjectFactory接口,使開(kāi)發(fā)人員通過(guò)實(shí)現(xiàn)該接口將指定對(duì)象池化;創(chuàng)建一個(gè)PoolableObjectFactory接口基類(lèi),在接口的實(shí)現(xiàn)中也可以繼承該基類(lèi)以節(jié)省開(kāi)發(fā)量。

創(chuàng)建一個(gè)通用的對(duì)象池CommonObjectPool類(lèi),該類(lèi)通過(guò)調(diào)用PoolableObjectFactory接口可以實(shí)現(xiàn)對(duì)象的池化,從池中取對(duì)象,將對(duì)象歸還到池中,檢驗(yàn)和銷(xiāo)毀一個(gè)對(duì)象的功能。

在實(shí)現(xiàn)CommonObjectPool時(shí)需要考慮代碼的線程安全性,以保證對(duì)象池的健壯性和效率。

2.4.2 對(duì)象池組件UML圖

對(duì)象池組件的類(lèi)圖如圖4,其中:

接口ObjectPool中定義了開(kāi)發(fā)人員使用對(duì)象池時(shí)可用的接口。

BaseObjectPool類(lèi)是對(duì)接口ObjectPool的一個(gè)基本實(shí)現(xiàn),開(kāi)發(fā)者可以通過(guò)繼承這個(gè)實(shí)現(xiàn)來(lái)創(chuàng)建自己所需的特定功能的對(duì)象池。

CommonObjectPool是我們創(chuàng)建的一個(gè)通用的對(duì)象池組件,它繼承了BaseObject,該組件滿(mǎn)足了以上我們的對(duì)象池組件開(kāi)發(fā)要求。該類(lèi)的各個(gè)屬性和方法定義如下:

屬性:

a. MaxActivate:最大活躍對(duì)象數(shù)目,在非INCREASE型對(duì)象池中決定了最多可以使用的對(duì)象的數(shù)目。如果小于零則為無(wú)限。

b. MaxIdle:最大空閑數(shù),控制對(duì)象池中最多有多少個(gè)空閑對(duì)象;該屬性也決定了對(duì)象池容器的大小。

c. MinIdle:最小空閑數(shù),保持對(duì)象池中最少的空閑對(duì)象數(shù)量。

d. 最大活動(dòng)數(shù)MaxActivate:最多可提供的對(duì)象數(shù)目。

e. PoolTYPE {INCREASE,BLOCK,TIMEOUT}:對(duì)象池類(lèi)型。分為:INCREASE(對(duì)象池空時(shí)可以繼續(xù)創(chuàng)建對(duì)象);BLOCK(對(duì)象池空時(shí)阻塞調(diào)用線程,拋出異常);TIMEOUT(對(duì)象池空時(shí),阻塞對(duì)象一段時(shí)間,直到超時(shí)拋出超時(shí)異常)。

f. MaxWaitTime:設(shè)置超時(shí)類(lèi)型時(shí),線程每次等待的時(shí)間。

g. MaxWait:超時(shí)等待時(shí)等待線程的最大數(shù)目。

h. NumWhileEvict:設(shè)置evictor執(zhí)行時(shí)需要檢測(cè)對(duì)象的數(shù)目。

i. CheckWhileIdle:標(biāo)示是否校驗(yàn)對(duì)象池中空閑的對(duì)象。

j. TestOnGet:從池中取對(duì)象時(shí)是否需要校驗(yàn)對(duì)象。

k. TestOnRelease:向池中歸還對(duì)象時(shí)是否需要校驗(yàn)對(duì)象。

l. TimeOutOnEvict:Evictor檢測(cè)對(duì)象池時(shí),池中對(duì)象的生命周期。

方法:

a. getObject:從對(duì)象池中取得一個(gè)對(duì)象。

b. releaseObject:將一個(gè)對(duì)象歸還到對(duì)象持中。

c. ivalidateObject:將取出的對(duì)象銷(xiāo)毀。

d. clean:清空對(duì)象池。

e. close:關(guān)閉對(duì)象池。

f. evict:對(duì)池中的對(duì)象進(jìn)行檢測(cè),將過(guò)期對(duì)象破壞掉。

g. addObjectToPool:向池中加入對(duì)象。

h. addObject:新建一個(gè)對(duì)象放入池中。

i. ensureMinIdle:確保池中對(duì)象數(shù)目的最小值。

j. startEvictor:?jiǎn)?dòng)后臺(tái)維護(hù)線程。

PoolableObjectFactory是可池化對(duì)象的接口,開(kāi)發(fā)者可以通過(guò)實(shí)現(xiàn)該接口使得指定對(duì)象被對(duì)象池進(jìn)行池化。

BasePoolableObjectFactory是PoolableObjectFactory接口的一個(gè)簡(jiǎn)單實(shí)現(xiàn),開(kāi)發(fā)者可以通過(guò)繼承該類(lèi)來(lái)池化特定的對(duì)象。

Evictor是CommonObjectPool中的內(nèi)部線程類(lèi),該類(lèi)負(fù)責(zé)創(chuàng)建一個(gè)后臺(tái)維護(hù)進(jìn)程以保證對(duì)象池的正常運(yùn)行。

TimeStampPair是CommonObjectPool中的內(nèi)部線程類(lèi),它是為存放對(duì)象并記錄對(duì)象時(shí)間信息的。

結(jié)束語(yǔ)

通過(guò)利用J2SE5.0提供的新特性實(shí)現(xiàn)對(duì)象池CommonObjectPool及其在Web應(yīng)用程序中的應(yīng)用,我們不僅對(duì)對(duì)象持技術(shù)有了很深的了解,而且在性能的測(cè)試與比較中對(duì)J2SE5.0對(duì)并發(fā)控制效率的提高有了一定的驗(yàn)證。

盡管我們的CommonObjectPool只是個(gè)試驗(yàn)中的組件,擴(kuò)展的Struts框架還有一些不足,但是其應(yīng)用前景還是相當(dāng)看好的。經(jīng)過(guò)對(duì)我們的擴(kuò)展框架的進(jìn)一步完善,我相信開(kāi)發(fā)人員能夠基于該框架輕松地開(kāi)發(fā)出穩(wěn)定性好效率高的Web應(yīng)用程序。

參考文獻(xiàn):

[1]Doug Lea.Java并發(fā)編程-設(shè)計(jì)原則與模式(第二版).中國(guó)電力出版社,2003-10-1.

[2][美]格蘭德.Java企業(yè)設(shè)計(jì)模式.電子工業(yè)出版社,2003-8-1.

[3]Paul Hyde.Java線程編程.人民郵電出版社,2003-11-1.

[4]Bruce Eckel.Java 編程思想.機(jī)械工業(yè)出版社,2002-8-9.

[5][美]布拉德利.Java程序設(shè)計(jì)教程.電子工業(yè)出版社,2003-7-1.

[6]李云山.深入淺出Java語(yǔ)言程序設(shè)計(jì).中國(guó)青年出版社,2003-9-1.

[7]孫衛(wèi)琴.Tomcat與Java Web開(kāi)發(fā)技術(shù)詳解.電子工業(yè)出版社,2004-8-1.

[8]邵維忠.UML用戶(hù)指南.機(jī)械工業(yè)出版社,2001-6-1.

[9]王行言.Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì).清華大學(xué)出版社,2000-9-1.

主站蜘蛛池模板: 国产精品浪潮Av| 欧美成人国产| 毛片网站免费在线观看| 亚洲区欧美区| 国产亚洲欧美另类一区二区| 天天综合色网| 1769国产精品视频免费观看| 内射人妻无套中出无码| 91亚洲国产视频| 久久中文字幕不卡一二区| 网友自拍视频精品区| 五月激激激综合网色播免费| 国产精品亚洲αv天堂无码| 亚洲天堂久久| 精品一区二区三区自慰喷水| 中文无码精品A∨在线观看不卡 | 中国特黄美女一级视频| 51国产偷自视频区视频手机观看| 国产欧美精品午夜在线播放| 一本久道久久综合多人| 久久久久久久久亚洲精品| 免费人成视网站在线不卡| 欧美三級片黃色三級片黃色1| 怡春院欧美一区二区三区免费| 亚洲综合色吧| 色综合五月婷婷| 欧美日韩国产精品va| 97成人在线视频| 午夜毛片福利| 欧美a√在线| 欧美一区二区福利视频| 欧美三级日韩三级| 欧美日本视频在线观看| 亚洲性网站| 国产精品一区在线观看你懂的| 亚州AV秘 一区二区三区| 日韩人妻少妇一区二区| 精品国产中文一级毛片在线看 | 婷婷中文在线| 久久久精品无码一区二区三区| 婷婷综合在线观看丁香| 国产在线精品人成导航| 在线无码九区| 亚洲精品天堂在线观看| 婷婷激情五月网| 国产精品亚洲а∨天堂免下载| 中文字幕亚洲精品2页| 极品性荡少妇一区二区色欲| 国产va在线观看免费| 国产精品55夜色66夜色| 国产一区免费在线观看| 精品人妻系列无码专区久久| 72种姿势欧美久久久久大黄蕉| 国产va视频| 国产无码精品在线播放| 精品国产一区二区三区在线观看| 国产高清在线观看| 毛片卡一卡二| 亚洲最大综合网| 一区二区三区国产精品视频| 高h视频在线| 亚洲天堂网2014| 无码专区国产精品一区| 亚洲第一区欧美国产综合| 啊嗯不日本网站| 谁有在线观看日韩亚洲最新视频| 青青青国产在线播放| 午夜精品久久久久久久2023| 国产午夜福利在线小视频| 亚洲三级a| 亚洲成a人片7777| 在线播放精品一区二区啪视频| 综合色在线| 欧美成人综合视频| 国产精品第5页| 国产a在视频线精品视频下载| 色婷婷视频在线| 久久精品这里只有精99品| 国产精选小视频在线观看| 高清无码手机在线观看| 亚洲第一成网站| 国产小视频免费|