亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java多線程訪問控制管理分析

        2014-10-21 19:57:17梁德華
        計算機光盤軟件與應用 2014年24期
        關鍵詞:多線程同步控制

        摘 要:本文分析并描述了Java多線程訪問控制的基本方法和多線程同步訪問的控制方法,以及使用優(yōu)先級解決死鎖問題的方法,并且用簡單語句作說明。

        關鍵詞:Java;多線程;同步控制

        中圖分類號:TP312

        1 Java多線程的基本控制

        在Java中,一個線程從創(chuàng)建到死亡稱為線程的一個生命周期,它的生命周期有多個不同狀態(tài),一般為:Enabled、Running、Sleeping、Joining、Waiting、Locking。對于線程的這些狀態(tài),Java在Thread類中定義了一些方法可以在程序中手動控制。要結(jié)束一個線程的運行,可以使用stop()方法。但是stop()方法并不是非常安全的,它會強制中止一個線程的運行,但是會釋放這個線程鎖住的所有對象,這些對象被解鎖后就可能被其他的線程直接訪問,導致錯誤的結(jié)果。因此,要中止一個線程,最好是設置一個標志位,在run()方法中根據(jù)這個標記來判斷是否繼續(xù)保持狀態(tài)。要中止線程的時候,可以使用setRunFlag()方法。

        在暫停和恢復線程執(zhí)行時也會出現(xiàn)同樣的問題??梢允褂肨hread類中supspend()和resume()方法來暫停和恢復,但不建議使用,它們?nèi)菀自斐删€程的死鎖。解決的方法也是使用一定的標志變量。使用setsuspendFlag(true)可以暫停線程的執(zhí)行,暫停時間的指定是通過sleep()方法來實現(xiàn),暫停結(jié)束就回到等待隊列,不是恢復執(zhí)行狀態(tài)。所以sleep()方法不能精確控制線程計劃工作的時間尺度。

        下面用模擬一個龜兔接力跑的實例來演示Java多線程的sleep()方法的控制。模擬的接力跑中有一只烏龜和一只兔子。當兔子跑完400米將接力棒交給烏龜,烏龜跑完400米后結(jié)束。部分代碼如下:

        2 Java多線程的同步控制

        多線程程序中,多個線程可以共享相同資源,這可能導致沖突。Java使用同步機制來解決這個問題。這個同步機制使用synchronized關鍵字,它主要用于多線程共享數(shù)據(jù)的同步,使用加鎖的機制,控制變量或代碼塊在某個時間段只能被一個線程訪問。

        Java中synchronized既可作為方法的修飾符,鎖住方法,也可在方法內(nèi)部鎖住部分語句。Synchronized方法和synchronized代碼塊在使用時是有區(qū)別的。將訪問共享數(shù)據(jù)的方法加上synchronized,例如把synchronized當作方法修飾符:

        Public synchronized void m1(){……}

        這就是同步方法。當某個線程調(diào)用這個同步方法時,會開始執(zhí)行直到完畢為止,其它想要調(diào)用這個方法的線程會進入阻塞狀態(tài),一直到這個方法獲得釋放為止。使用synchronized來修飾一個比較大的方法時,也會鎖住其它一些不需要鎖住的數(shù)據(jù),導致程序效率下降。Synchronized塊則是把方法內(nèi)的某段代碼使用synchronized來修飾,可以減少同步范圍。例如:Public void m1(){ …… Synchronized(so){ …… }}

        使用synchronized修飾時,就代表著同步機制啟動,某個時刻只能某個線程訪問數(shù)據(jù)和資源,阻止其它線程訪問,這種狀態(tài)即使出現(xiàn)阻塞和死鎖現(xiàn)象也不會解除。

        3 Java多線程的死鎖問題

        為了控制資源的訪問沖突,需要使用synchronized對訪問資源進行加鎖,但加鎖會帶來一個潛在的危險:死鎖。如果兩個或兩個以上的線程在等待兩個或兩個以上的鎖被釋放,但實際上這些鎖根本就不會被解鎖,那么這些線程就會進入無限等待的狀態(tài),稱之為死鎖。線程等待解鎖的這種狀態(tài)有時也被稱作堵塞。死鎖例子部分代碼如下:

        4 Java多線程的優(yōu)先級

        在多線程編程中要預防死鎖的發(fā)生,不然死鎖后會導致浪費大量時間和資源。防止死鎖的方法很多,最重要的就是防止循環(huán)等待的發(fā)生??梢允褂迷O置線程的優(yōu)先級來解決這一問題。同一時刻會有很多在排隊等待資源的線程,它們各自的重要性是不同的??梢再x予每個線程不同的優(yōu)先級,讓任務更急的線程獲得更高的優(yōu)先級,更快的進入執(zhí)行狀態(tài)。

        Java中提供了10個等級的線程優(yōu)先級,最低為1,最高為10,默認優(yōu)先級為5。對于一個新創(chuàng)建的線程,如果沒有指定優(yōu)先級,它的優(yōu)先級將和它的父線程優(yōu)先級一致。使用setPriority()方法可以為線程指定優(yōu)先級。

        例如:int newPrio=Thread.currentThread( ).getPriority( )+1;

        Thread.currentThread( ).setPriority(newPrio);

        5 結(jié)束語

        Java多線程編程可以合理的調(diào)用多項任務,功能非常強大。但是多線程共享數(shù)據(jù)或資源時會導致執(zhí)行的錯誤,因此多線程訪問控制管理機制在解決數(shù)據(jù)不一致性、資源沖突等問題時是非常有用的。高質(zhì)量的使用Java多線程訪問控制管理機制可以提高程序運行效率,縮短任務執(zhí)行的時間。

        參考文獻:

        [1]明日科技.Java從入門到精通(3版)[M].北京:清華大學出版社,2013.

        [2]路勇.Java多線程同步問題分析[J].軟件,2012(04):31-33.

        作者簡介:梁德華(1977-),男,江西瑞昌人,華中科技大學軟件工程碩士,講師,研究方向:軟件工程、軟件技術教學。

        作者單位:江西旅游商貿(mào)職業(yè)學院 藝術傳媒與計算機分院,南昌 330100

        猜你喜歡
        多線程同步控制
        基于EtherCAT網(wǎng)絡的金剛線多線切割機雙主軸同步控制
        Java并發(fā)工具包對并發(fā)編程的優(yōu)化
        基于多線程文件傳輸關鍵技術研究與實現(xiàn)
        網(wǎng)頁爬蟲技術的關鍵技術研究探索
        一種基于多線程的高速磁盤鏡像算法
        基于云模型的舵機同步控制
        基于廣義預測的雙轉(zhuǎn)動掃描系統(tǒng)同步控制
        一個具有完全四翼形式的四維混沌系統(tǒng)同步控制
        亚洲人精品亚洲人成在线| 国产99在线视频| 国产2021精品视频免费播放| 免費一级欧美精品| 亚洲一区二区三区在线看| 国产精品视频自拍在线| 中文人妻熟女乱又乱精品| 无码人妻丰满熟妇片毛片| 久久久窝窝午夜精品| 国产精品白浆免费观看| 久久一区二区三区少妇人妻| 品色堂永远免费| 欧美亚洲国产精品久久高清| 国产精品久久久久久2021| 亚洲最稳定资源在线观看| 国产自拍视频免费在线观看| 国产内射视频在线免费观看| 岳好紧好湿夹太紧了好爽矜持| 91高清国产经典在线观看| 人妻少妇无乱码中文字幕| 国产一区二区三区在线观看完整版 | 亚洲国产毛片| 激情人妻中出中文字幕一区| 日韩亚洲国产中文字幕| 最新国产女主播在线观看| 久久精品中文字幕| 少妇寂寞难耐被黑人中出| 亚洲日韩图片专区小说专区| 男女啦啦啦视频在线观看| 亚洲av成人精品一区二区三区| 人妻献身系列第54部| 久久亚洲国产欧洲精品一| av网站免费观看入口| 蜜臀av无码人妻精品| 天天爽夜夜爽人人爽曰喷水| 精品一区二区亚洲一二三区| 久青草影院在线观看国产| 免费观看又污又黄的网站| 亚洲成a人片77777kkkkk| 精品亚洲一区二区三区四区五| 双腿张开被9个男人调教|