摘 要:由于Java程序的應(yīng)用范疇越來越廣,這就需要我們對(duì)其程序的應(yīng)用與運(yùn)作加以合理地了解與分析,本文主要通過對(duì)Java這種程序在實(shí)際的并發(fā)程序中的應(yīng)用情況予以動(dòng)態(tài)的分析與闡述,并對(duì)其予以技術(shù)的重演方面進(jìn)行系統(tǒng)性的分析與探索,能夠推動(dòng)Java程序本身的發(fā)展。
關(guān)鍵詞:Java程序;并發(fā)程序;動(dòng)態(tài)分析;重演技術(shù);研究
中圖分類號(hào):TP312
由于我國在科技領(lǐng)域發(fā)展的腳步不斷深化,促使對(duì)Java程序的應(yīng)用得以廣泛性的應(yīng)用,其并發(fā)的Java程序也在一定程度上得以新的推廣與應(yīng)用,這樣一來對(duì)并發(fā)程序的系統(tǒng)性動(dòng)態(tài)分析就成了必然。我們能夠根據(jù)Java語言的特點(diǎn)對(duì)其予以系統(tǒng)性的分析與闡釋,并對(duì)其在分析與設(shè)計(jì)方面予以動(dòng)態(tài)性的測(cè)試,推動(dòng)Java語言與程序在我國現(xiàn)階段的應(yīng)用與發(fā)展能夠得以更好的發(fā)展平臺(tái)與愿景。
1 有關(guān)并發(fā)Java程序動(dòng)態(tài)分析的闡述
通常情況下,并發(fā)程序會(huì)在其運(yùn)行的過程中,進(jìn)行多個(gè)事件,或者一個(gè)事件的同步執(zhí)行,并且對(duì)其予以順序上的編制,附之以“同步序列”的名稱。這些同步序列的科學(xué)運(yùn)行,能夠?qū)︻A(yù)期中的運(yùn)行過程予以關(guān)鍵性的決定作用。
在對(duì)并發(fā)Java程序進(jìn)行動(dòng)態(tài)的分析實(shí)驗(yàn)中,將P設(shè)置為并發(fā)程序,這時(shí)如果出現(xiàn)某同步序列被執(zhí)行的現(xiàn)象,就說明P可能在執(zhí)行輸入A的操作,這種情況就能夠說該同步序列對(duì)輸入為A的并發(fā)程序,是可行的。若依托于并發(fā)程序的源程序正常作用的情況下,某同步序列被預(yù)測(cè)成,在執(zhí)行輸入A的時(shí)候P執(zhí)行的同步序列程序,就能夠說該同步序列是對(duì)輸入A的這一并發(fā)程序的操作是有效的。如下方案進(jìn)行分析與闡述:
1.1 對(duì)并發(fā)Java程序的測(cè)試分析
在實(shí)際的并發(fā)Java程序的測(cè)試中,通常都是依托于兩種方法進(jìn)行測(cè)試,一是對(duì)并發(fā)程序的不確定性進(jìn)行的測(cè)試,一是對(duì)并發(fā)程序的確定性進(jìn)行的測(cè)試。
在對(duì)并發(fā)程序的不確定性進(jìn)行的測(cè)試中,需要按照一定的步驟進(jìn)行測(cè)試工作的展開,需要為并發(fā)程序P選好一組進(jìn)行輸入,在測(cè)試的過程中,需要將選擇好的輸入A的每個(gè)數(shù)據(jù),予以P的多次運(yùn)行,并對(duì)所有的運(yùn)行結(jié)果進(jìn)行比較,主要是將其同預(yù)期結(jié)果的比較。當(dāng)同一輸入A時(shí),并發(fā)程序P需要進(jìn)行多次的運(yùn)行,這樣一來P就能夠執(zhí)行不同類型的,具有可行性的同步并發(fā)程序,與此同時(shí)其對(duì)發(fā)現(xiàn)錯(cuò)誤的功能也予以一定程度的提升。
在對(duì)并發(fā)程序予以確定性的測(cè)試中,需要在眾多的數(shù)據(jù)中選擇一組為例,并對(duì)每組需要測(cè)試的數(shù)據(jù)都予以形如(A,S)的輸入,需要注明的是A是對(duì)并發(fā)程序的輸入數(shù)據(jù),而S則是對(duì)并發(fā)程序的同步序列。對(duì)測(cè)試中的每組選擇(A,S)的數(shù)據(jù)進(jìn)行適當(dāng)?shù)胤治?。在?shí)際的測(cè)試中,需要P進(jìn)行A的輸入操作,并依照同步序列進(jìn)行高速的運(yùn)轉(zhuǎn)工作,通過這種方法能夠?qū)Σl(fā)程序的同步序列予以可行性的測(cè)試。對(duì)其產(chǎn)生的結(jié)果進(jìn)行預(yù)期的比較,如果不同就能夠確定其發(fā)現(xiàn)錯(cuò)誤。確定性測(cè)試比不確定性測(cè)試在產(chǎn)生的結(jié)果上要更優(yōu),其能夠?qū)尚械木哂杏行У呐c非有效的同步序列予以發(fā)現(xiàn)。
1.2 構(gòu)造并發(fā)程序動(dòng)態(tài)分析方案的闡述與分析
在實(shí)際構(gòu)造并發(fā)程序動(dòng)態(tài)分析中,通常是予以兩種方法進(jìn)行分析,一種是建立在實(shí)現(xiàn)的基礎(chǔ)上,一種則是建立在語言方面上的方法分析。
圖1 Java線程圖示
針對(duì)建立在實(shí)現(xiàn)的基礎(chǔ)上的方法,其所需要的程序需要依托于編譯器與運(yùn)行的環(huán)境,以及操作系統(tǒng)本身這三方進(jìn)行并發(fā)程序的實(shí)現(xiàn)。在實(shí)際的操作中,我們可以通過對(duì)其予以相應(yīng)的變動(dòng),就能并發(fā)程序的同步序列的運(yùn)行。比如:在現(xiàn)實(shí)的工作中,建立在實(shí)現(xiàn)基礎(chǔ)上的現(xiàn)代化工具,能夠予以程序員設(shè)置斷點(diǎn)與選擇執(zhí)行程序的權(quán)利,并依托于一定的方法對(duì)程序的運(yùn)行予以合理的控制。
針對(duì)建立在語言上的方法,需要其能夠?qū)φZ言程序予以了解,并依托于語言并發(fā)程序,對(duì)同步序列予以形式的外衣做包裹,并對(duì)同步序列予以合理地定義。與此同時(shí),需要其能夠?qū)ν叫蛄杏枰允占姆绞綄?duì)其進(jìn)行相應(yīng)的記錄。在重演同步序列環(huán)節(jié),需要對(duì)被測(cè)的并發(fā)程序予以合理與適當(dāng)?shù)馗膭?dòng),促使在對(duì)程序進(jìn)行輸入操作的同時(shí),能夠依托于同步序列進(jìn)行科學(xué)地運(yùn)作。這個(gè)過程中的S均是通過同步序列這一收集工具在實(shí)際的程序輸入中獲得的數(shù)據(jù)。
在進(jìn)行動(dòng)態(tài)分析的過程中,其會(huì)依托于程序的框圖進(jìn)行實(shí)際的應(yīng)用,利用各種語言程序加以動(dòng)態(tài)的信息輸送,促使其能夠在Java程序動(dòng)態(tài)的運(yùn)行中,對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)性地變更,推動(dòng)整個(gè)程序的正常運(yùn)轉(zhuǎn)。
2 對(duì)Java語言在同步機(jī)制方面的闡述與分析
通常情況下Java語言的同步機(jī)制具有監(jiān)控器的功用,但在實(shí)際的運(yùn)行中受到了一些因素的限制與干預(yù),也就是說每個(gè)Java程序的對(duì)象有且只有一個(gè)能夠同本對(duì)象有關(guān)的條件變量。Java的對(duì)象一般來說都在構(gòu)建同步機(jī)制的環(huán)節(jié)予以關(guān)鍵段的設(shè)置,通常都是以鎖的形式進(jìn)行設(shè)置。而在實(shí)際的操作中,鎖相當(dāng)于計(jì)數(shù)器的作用,當(dāng)線程進(jìn)入到同步方法的階段,其計(jì)數(shù)值就會(huì)得以相應(yīng)的增加,而當(dāng)線程退出同步方法時(shí),計(jì)數(shù)值就會(huì)予以相應(yīng)地減少。但是在Java程序的執(zhí)行與操作中,還可能發(fā)生線程被阻塞的問題,并能夠通過一定的條件對(duì)其進(jìn)行喚醒工作的設(shè)置,通常情況下這種功用都是基于Object系統(tǒng)之中的notify()、wait(),以及notifall()等方法中的。對(duì)Java程序的操作中,其每一個(gè)實(shí)例的對(duì)象都需要擁有相關(guān)的等待集合,這個(gè)等待集合是一個(gè)線程集合,并且其初始值為0。當(dāng)對(duì)其進(jìn)行口令的調(diào)用時(shí),就需要其能夠依托于口令的特殊方法對(duì)線程進(jìn)行實(shí)例對(duì)象的添加,并對(duì)其進(jìn)行同步鎖的釋放過程,當(dāng)其他的線程都調(diào)用實(shí)例對(duì)象方法就可以完成這一環(huán)節(jié)的執(zhí)行工作。與此同時(shí),特殊口令就能夠?qū)x擇性的對(duì)線程予以喚醒工作的執(zhí)行,并且其選擇不具有特定性與規(guī)律性。
圖2
3 對(duì)Safepro/java線程的測(cè)試技術(shù)予以科學(xué)地闡述與分析
一般來說,Java語言程序具有靈活性的特征,尤其是其提供的線程技術(shù)更是將這一特點(diǎn)予以很好地闡釋,能夠?qū)Τ绦虻墓δ苡枰砸欢ǔ潭鹊膹?qiáng)化,但是這種靈活性的特征對(duì)實(shí)際的程序操作人員來說就是能力的高要求與高標(biāo)準(zhǔn)。這一環(huán)節(jié)就需要程序員能夠依托于正確的同步策略對(duì)死鎖問題予以順利地規(guī)避,并能夠?qū)﹀e(cuò)誤的發(fā)現(xiàn)予以實(shí)時(shí)地排錯(cuò)工作,這就需要Safepro/Java線程的測(cè)試。
3.1 對(duì)線程的包裝
在Java程序的執(zhí)行中,創(chuàng)建Thread類,以及Thread子類在實(shí)例生成中都需要程序中的每個(gè)線程予以完成的工作。通常情況下,Thread類中有許多用于管理線程的實(shí)踐方法,這就促使動(dòng)態(tài)分析能夠合理與科學(xué)地進(jìn)行。
在實(shí)際的動(dòng)態(tài)分析中,需要程序中的每一個(gè)線程都對(duì)自身相關(guān)的數(shù)據(jù)與信息予以保留,比如:線程的狀態(tài)轉(zhuǎn)移問題與動(dòng)態(tài)標(biāo)識(shí)等都需要予以保留。在處理程序中的數(shù)據(jù)與信息時(shí),需要依托于面向?qū)ο蟮囊环N繼承機(jī)制進(jìn)行集成系統(tǒng)類Thread測(cè)試的創(chuàng)建,這樣一來傳統(tǒng)靜態(tài)測(cè)試中的Thread就會(huì)被相應(yīng)地替換為JKThread,這樣一來接下來的程序應(yīng)用就會(huì)通過JKThread進(jìn)行實(shí)際的運(yùn)行,并能夠從其中將包裝層所具有的特性予以獲取,能夠在其中進(jìn)行動(dòng)態(tài)標(biāo)識(shí)的分配工作的實(shí)現(xiàn)。這樣一來就能夠?qū)KThread類中的Thread類予以函數(shù)的構(gòu)造,并對(duì)用戶的動(dòng)態(tài)線程配置以唯一性的要求。與此同時(shí),還能夠?qū)χ剌d的Thread類進(jìn)行管理線程方法的應(yīng)用,比如:start()、yield()等方法的應(yīng)用,這樣一來就能夠?qū)τ脩舻木€程狀態(tài)予以跟蹤式的檢查與轉(zhuǎn)移。在對(duì)并發(fā)Java程序的動(dòng)態(tài)分析中,還可以通過將插樁線程中的探針用于中間層的方法,這樣一來就能夠相應(yīng)地減少對(duì)用戶在程序方面的修改與改動(dòng),從而能夠?qū)?dòng)態(tài)的程序分析予以透明性的特征,對(duì)用戶的線程予以動(dòng)態(tài)性的分析。但是這種方法的應(yīng)用不能滿足于所有的線程,比如:在Java程序的實(shí)際運(yùn)行中,其中有個(gè)JVM能夠自動(dòng)地創(chuàng)建一條main線程,但這條線程并沒有完整的名稱,在實(shí)際運(yùn)行當(dāng)中這條線程不能通過JThreadInst進(jìn)行包裝環(huán)節(jié)的。還有一種情況就是當(dāng)在Java程序中的GUI環(huán)境中進(jìn)行動(dòng)態(tài)分析時(shí),系統(tǒng)會(huì)為其設(shè)置與創(chuàng)建一個(gè)點(diǎn)擊按鈕式的外部事件線程,這個(gè)線程設(shè)計(jì)也是無法通過JThreadInst進(jìn)行包裝,因此對(duì)并發(fā)Java程序的動(dòng)態(tài)分析需要予以具體情況,具體分析的特征進(jìn)行適時(shí)合理分析與處理。
3.2 對(duì)同步序列的定義
在實(shí)際的Java語言程序中,其同步機(jī)制能夠囊括同步方法中的所有實(shí)例對(duì)象,并將其視作監(jiān)控器的功用,這就是同步對(duì)象的定義。通常情況下,同步序列主要是由同步事件構(gòu)成的,這就需要我們對(duì)并發(fā)Java程序里同步事件的類型進(jìn)行定義與分析。
一般來說,在并發(fā)Java程序中的同步事件類型共有四種,分別是線程開始執(zhí)行的同步方法或者同步塊、線程執(zhí)行的同步方法或者是同步塊、線程在同比方法或者同步塊中執(zhí)行的wait()操作、在同步方法或者同步塊中執(zhí)行的notify()與notifyall()操作等的線程這四種類型。
3.3 對(duì)同步序列的收集和重演的闡述與分析
在對(duì)并發(fā)Java程序的動(dòng)態(tài)分析中,需要我們能夠考慮到并發(fā)程序中所要訪問的同步對(duì)象的數(shù)據(jù)與信息,并且這些數(shù)據(jù)與信息通常情況下都是以能夠訪問的形式進(jìn)行儲(chǔ)存的。一般情況下,對(duì)同步序列的收集與重演都需要依托于一定的方法進(jìn)行實(shí)際的運(yùn)作。
4 結(jié)束語
就現(xiàn)階段而言,并發(fā)Java程序能夠被應(yīng)用于社會(huì)中的各個(gè)領(lǐng)域之中,這就需要我們對(duì)其進(jìn)行程序的動(dòng)態(tài)分析,能夠?qū)ζ鋵?shí)際的工作特點(diǎn)與運(yùn)行系統(tǒng)予以系統(tǒng)性的了解與分析。這樣一來并發(fā)Java程序就能夠在實(shí)際的生活與工作中予以新的創(chuàng)新與發(fā)展,能夠推動(dòng)我國科學(xué)技術(shù)領(lǐng)域的繁榮發(fā)展。
參考文獻(xiàn):
[1]周志遠(yuǎn),張大方,繆力.對(duì)Java并發(fā)程序進(jìn)行模型檢測(cè)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012(02).
[2]王艷臣,李必信,戴君.基于擴(kuò)展同步序列的Java多線程程序可達(dá)性測(cè)試方法[J].東南大學(xué)學(xué)報(bào)(自然科學(xué)版),2013(06).
[3]華衛(wèi)中,趙春云.Java線程的深入探討[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012(07).
[4]唐建清,鄒國霞.操作系統(tǒng)中“閱覽室”問題的JAVA實(shí)現(xiàn)[J].桂林航天工業(yè)高等??茖W(xué)校學(xué)報(bào),2013(04).
作者簡(jiǎn)介:王宏(1977-)女,遼寧彰武人,本科,講師,主要研究方向:計(jì)算機(jī)教學(xué)。
作者單位:彰武縣中等職業(yè)技術(shù)專業(yè)學(xué)校,遼寧彰武 123200