鐘健
摘要:目前狀況下,隨著經(jīng)濟(jì)的迅速發(fā)展以及科學(xué)技術(shù)水平的不斷提高,我國(guó)的計(jì)算機(jī)科學(xué)技術(shù)取得了較大程度上的發(fā)展,為我國(guó)國(guó)民經(jīng)濟(jì)的提高做出重要貢獻(xiàn)。眾所周知,計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展與語言編程機(jī)制的逐步發(fā)展與完善莫不可分。Java語言編程機(jī)制便是其中的重要一種,隨著它的不斷發(fā)展與改進(jìn),目前狀況下它已經(jīng)在計(jì)算機(jī)語言中有了十分廣泛的運(yùn)用。該文主要針對(duì)Java同步線程模型分析與改進(jìn)進(jìn)行研究與分析。
關(guān)鍵詞:Java語言編程機(jī)制;線程模型;改進(jìn)
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)18-4178-02
1 Java同步線程模型分析
對(duì)于Java語言編程機(jī)制而言,當(dāng)它與同步線程模型進(jìn)行了一定程度上的結(jié)合之后,能夠?qū)ζ湎到y(tǒng)并發(fā)執(zhí)行程度進(jìn)行較大幅度的提高,也就是說在原先的編程機(jī)制基礎(chǔ)之上進(jìn)一步的發(fā)展與提高。之前,在原先的Java編程機(jī)制之中存在著一定的弊端與局限性,這些問題的存在阻礙了Java編程機(jī)制的進(jìn)一步發(fā)展,然而,自從在Java之中引入了同步線程模型之后,原先所存在的問題就能夠得到一定程度上的控制。我們將同步線程模型與多進(jìn)程模式進(jìn)行一定程度上的對(duì)比分析,發(fā)現(xiàn)相比于多進(jìn)程模式,前者能夠發(fā)揮出更大的優(yōu)越性,兩者之間的差異性也能很明顯的表現(xiàn)出來。兩者之間的差異性主要表現(xiàn)在如下幾個(gè)方面:對(duì)于進(jìn)程而言,它的兩個(gè)單位之間是相互分開的,而對(duì)于線程而言,它的每個(gè)執(zhí)行單元具有一定程度的獨(dú)立性,從客觀的角度來說,實(shí)現(xiàn)獨(dú)立調(diào)整已經(jīng)不是問題,而是成為了一種非常熟練的工作。另一方面,通過技術(shù)上進(jìn)步,各自分派也成為可能,每個(gè)進(jìn)程都可以稱之為獨(dú)立出來的控制流,雖然在一定程度上具有了獨(dú)立性,但從實(shí)質(zhì)上來看,它并不是可獨(dú)立擁有資源的基本單位。從這方面來看,在實(shí)際的操作當(dāng)中,能夠?qū)崿F(xiàn)對(duì)獨(dú)立擁有資源的單位頻率進(jìn)行切換,而且操作頻率有所降低。進(jìn)程并發(fā)的執(zhí)行存在著兩個(gè)十分必要的條件,這兩個(gè)必要的條件分別害死可擁有資源的獨(dú)立單位以及可獨(dú)立調(diào)度及分派的基本單位。在傳統(tǒng)的操作系統(tǒng)之中,這兩項(xiàng)屬性得到了切實(shí)體現(xiàn)。值得注意的是,總體進(jìn)程之中,兩種屬性成為了一種非常堅(jiān)實(shí)的基礎(chǔ),為進(jìn)程的并發(fā)執(zhí)行提供了強(qiáng)大的動(dòng)力。還有就是,為了全面提高程序并發(fā)執(zhí)行的有效性,有一部分的操作仍然只能夠在系統(tǒng)中進(jìn)行實(shí)時(shí),這些操作主要有創(chuàng)建以及撤銷等。對(duì)于一項(xiàng)資源的擁有者而言,在資源之中,對(duì)于不同的進(jìn)程而言,它所具有的內(nèi)存空間堆棧等也存在著一定程度上的差異?;诖耍?dāng)系統(tǒng)在對(duì)這一系列的操作進(jìn)行執(zhí)行時(shí),必須將這一情況納入到考慮范圍之內(nèi),騰出更大的空間。所以,在對(duì)系統(tǒng)進(jìn)行設(shè)置時(shí),對(duì)于進(jìn)程數(shù)目的設(shè)定要求能夠滿足相應(yīng)的標(biāo)準(zhǔn),在對(duì)進(jìn)程進(jìn)行切換時(shí)也應(yīng)該控制好次數(shù)。也就是說,從這一方面來看,這對(duì)進(jìn)程并發(fā)更深層次的發(fā)展造成了一定程度上的阻礙作用。然而,對(duì)于Java同步線程模式而言,其難點(diǎn)主要集中在如何采取有效措施對(duì)并發(fā)程序設(shè)計(jì)中所出現(xiàn)的一系列問題進(jìn)行合理而有效的解決。
一般情況下,在進(jìn)行操作的過程之中,可以對(duì)線程進(jìn)行一定程度的聯(lián)想,將線程當(dāng)做是程序當(dāng)中的某個(gè)控制流程。如果是從固有系統(tǒng)角度出發(fā),多數(shù)情況僅僅會(huì)存在和一個(gè)程度的控制流程,且這種控制流程具有相應(yīng)的循環(huán)性,因此在原先的操作系統(tǒng)之后總,對(duì)于流程的執(zhí)行職能按部就班,一步一步來完成,這種環(huán)境我們可以將之稱作為單線程,無疑單線程的執(zhí)行效率是相對(duì)較低的。近幾年來,隨著科學(xué)技術(shù)水平的不斷進(jìn)步,在原先的操作系統(tǒng)的基礎(chǔ)之上引進(jìn)了新技術(shù),取得了較大程度上的進(jìn)步,Java多線程模式便是其中一種典型技術(shù)。隨著多線程模式的引入,原先的單線程模式也逐步淡出人們的視線。新型的Java多線程模式可以大幅提高執(zhí)行效率,它不僅可以對(duì)程序的執(zhí)行進(jìn)行有效的支持,同時(shí)又能夠?qū)Χ鄠€(gè)控制流程進(jìn)行流暢操作。
一般情況下,在對(duì)Java多線程模式進(jìn)行操作的過程之中,會(huì)出現(xiàn)兩條控制線程,且這兩條控制線程具有一定的特殊性,這兩條控制線程存在于操作程序之中,且兩者所執(zhí)行的任務(wù)不同,一條線程的職責(zé)是對(duì)用戶事件進(jìn)行一定程度上的處理,而另一條線程作用是進(jìn)行分析運(yùn)算。值得注意的是,一般情況下處理器僅僅只有一個(gè)個(gè)時(shí),也就是說線程是難以進(jìn)行同時(shí)處理的,兩條線程的執(zhí)行之間必須存在著一定的空隙,如果其中一條線程正在等待對(duì)相關(guān)數(shù)據(jù)進(jìn)行獲取時(shí),則系統(tǒng)就會(huì)自動(dòng)進(jìn)行線程的切換。正是由于這一原因,在對(duì)多線程模式進(jìn)行引入之后,需要與計(jì)算機(jī)處理器個(gè)數(shù)組合。
2 Java同步進(jìn)程模型改進(jìn)的嘗試
對(duì)于Java編程語言而言,從整體角度上來看,線程模型正是其“軟肋”,因?yàn)镴ava編程語言中的線程模型與實(shí)際情況的適應(yīng)度較低,而且它所面對(duì)的對(duì)象相對(duì)狹窄,不能做到面面俱到。除此之外,Java語言的優(yōu)勢(shì)在于,其線程模型的滿意度較高,能夠?qū)崿F(xiàn)很多的功能,減少了客觀上的影響。從綜合的角度來分析,Java作為一種編程語言,其線程模型仍然存在著諸多的缺陷,這些缺陷的存在阻礙了其進(jìn)一步的發(fā)展。因此,采取有效措施對(duì)Java同步進(jìn)程模型的改進(jìn)十分重要。
而要想有效解決Java同步線程模型所存在的額缺陷,處理數(shù)據(jù)死鎖是重中之重,就死鎖本身來說,它的形成,主要是兩個(gè)或者是兩個(gè)以上的線程,互相之間的無限制等待情況,最終結(jié)果就是,兩個(gè)線程都沒有辦法執(zhí)行任務(wù),那么這一狀態(tài)就被稱作為死鎖狀態(tài)。在Java同步線程之中,為了應(yīng)對(duì)這一問題,通過對(duì)synchronized 關(guān)鍵詞進(jìn)行一定程度上的使用,并在此基礎(chǔ)之上實(shí)現(xiàn)對(duì)于對(duì)象的鎖操作。當(dāng)鎖操作完成之后,之前所運(yùn)用的synchronized 關(guān)鍵詞語句便能夠得到有效的執(zhí)行,除了以上的闡述之外,語句執(zhí)行結(jié)束后,無論系統(tǒng)判定為正常也好、不正常也好,解鎖操作都會(huì)自動(dòng)完成。
一般情況下,對(duì)于并發(fā)線程而言,它們會(huì)對(duì)程序中的資源進(jìn)行一定程度上的競(jìng)爭(zhēng),針對(duì)這一情況,必須采取措施對(duì)程序當(dāng)中的共享資源進(jìn)行有效而均衡的分配,從而達(dá)到線程在執(zhí)行程序的過程之中能夠?qū)τ邢薜馁Y源進(jìn)行充分利用的效果。在Java之中,并不存在專門為死鎖提供檢測(cè)的程序。所以,對(duì)于Java程序員而言,就必須認(rèn)真處理死鎖的相關(guān)程序。一般情況下,對(duì)于線程程序而言,很多都是可以對(duì)其進(jìn)行歸納總結(jié)的,如果兩個(gè)或兩個(gè)以上的線程彼此之間無限期的等待,最終導(dǎo)致兩個(gè)線程都無法有效的執(zhí)行任務(wù),從而造成死鎖。比如如下程序:endprint
class Printer implements Runnable {
Input input ;
synchronized void print (){
input . write ();
}synchronized void write (){
}public void run (){
print ();
};
}Printer printer;
synchronized void write (){
printer. sendData ();
}public void run (){
write ();
};
}
從以上的編程來看,不難發(fā)現(xiàn),一個(gè)對(duì)象會(huì)對(duì)應(yīng)另一個(gè)與其存在一定關(guān)聯(lián)的monitor對(duì)象,這個(gè)對(duì)象的具體作用可以用“守門人”來形容,每次僅僅允許一個(gè)synchronized 方法進(jìn)入,而如果其中的一個(gè)synchronized 方法結(jié)束之后,monitor就會(huì)進(jìn)行一定程度上的解鎖,此時(shí)另外一個(gè)synchronized方法便可以開始執(zhí)行。那么應(yīng)該如何采取有效措施對(duì)這一死鎖問題進(jìn)行解決?其實(shí)只需要對(duì)正確線程程序進(jìn)行編制,主要策略如下:首先,需要對(duì)給定的任務(wù)目標(biāo)進(jìn)行有效的完成,在執(zhí)行目標(biāo)的過程中,需要注意一定的同步性,即與其他任務(wù)同時(shí)進(jìn)行,通過這樣的操作,可以對(duì)每個(gè)線程完成的功能進(jìn)行一定程度上的控制,并在此基礎(chǔ)之上,就沒有必要對(duì)兩個(gè)線程進(jìn)行使用,因?yàn)樵谶@一操作之后,兩者之間就存在著一定的依賴性,當(dāng)從一個(gè) synchronized 方法中調(diào)用另一個(gè) synchronized 方法時(shí),要謹(jǐn)慎方可。
3 結(jié)束語
隨著計(jì)算機(jī)技術(shù)的逐漸發(fā)展,Java語言編程的效果已經(jīng)越來越明顯,將其引入同步線程模型,可以充分改進(jìn)其中的一些弊端,將大大提高運(yùn)行效率。
參考文獻(xiàn):
[1] 周志遠(yuǎn),張大方,繆力.基于 Java 內(nèi)存模型的并發(fā)程序模型檢測(cè)[J].計(jì)算機(jī)工程與科學(xué),2010(3).
[2] 苗康,余嘯,趙吉,沈宇.基于關(guān)系演算的 Java 模式識(shí)別[J].計(jì)算機(jī)應(yīng)用研究, 2010(9).
[3] 于利前,王林章,雷斌,趙建華,李宣東.靜動(dòng)態(tài)結(jié)合的 Java 程序不變性分析方法[J].計(jì)算機(jī)學(xué)報(bào),2010(4).
[4] 喻志虎,鄒華,楊放春.Parlay應(yīng)用服務(wù)器的軟件容錯(cuò)研究與設(shè)計(jì)[J].北京郵電大學(xué)學(xué)報(bào),2004,27(增刊):12-15.
[5] HORSTMANN C S,CORNELL G.Java2核心技術(shù)(卷2):高級(jí)特性[M].陳昊鵬, 王浩,姚建平,等,譯.7版.北京:機(jī)械工業(yè)出版社,2006.
[6] 柴平渲,龔向陽,程時(shí)端.分布式入侵檢測(cè)技術(shù)的研究[J].北京郵電大學(xué)學(xué)報(bào),2002,25(2):58-62.endprint