<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 6, comments - 21, trackbacks - 0, articles - 2

    JAVA學習筆記——多線程(并發(fā))

    Posted on 2005-02-01 23:41 tedazf 閱讀(8670) 評論(4)  編輯  收藏 所屬分類: JAVA

    JAVA學習筆記——多線程(并發(fā))

     

    多線程的用途

    程序的某一部分正在等一個事件或資源,而你又不想讓它把整個程序都給阻塞了。因此你可以創(chuàng)建一個與該事件或資源相關的線程,讓它與主程序分開來運行,例如在運算的同時,監(jiān)視鍵盤的輸入。

     

    多線程的缺點

    共享資源時,會降低運行效率;額外的消耗CPU資源;使用不當會拋出異常、或引發(fā)一些不正常狀態(tài);與平臺有一定的相關性。

     

    線程的狀態(tài)

    1.       new:線程剛剛建好,還未啟動。

    2.       runable:排在隊列中等待被分配CPU時間片。

    3.       dead:被中止的狀態(tài)。

    4.       blocked:由于非CPU時間片原因而不能運行的線程(如sleep()、wait()、IO問題)

     

    實現方法

    1.       創(chuàng)造一個類去實現runable接口,并重寫run()方法,然后實例化出來一個對象A,然后在主程序中用A作為參數創(chuàng)建一個Thread類的對象,調用其中的start()來啟動線程。(翁愷與孫鑫推薦用此種方法創(chuàng)建線程)

    2.       Thread類中派生出一個類,重寫run()方法,然后在主線程中創(chuàng)建一個對象,調用其中的start()方法來啟動線程。(BruceEckel則推薦用此種方法創(chuàng)建線程)

     

    主要函數

    start():啟動一個進程。

    stop():結束一個進程,由于它不會釋放對象的鎖,所以現在已經不提倡使用它了。

    suspend():掛起進程。(不推薦使用)

    resume():喚醒進程。(不推薦使用)

    interrupt():打斷

    yield():主動放棄CPU的占用,也可能在未執(zhí)行到此語句時,被虛擬機強制放棄,所以一般不能用來嚴格控制線程。

    sleep():暫停線程一段時間,然后重新進入CPU使用序列排隊,所以并不能準確地設定線程的暫停時間,所設定的時間只是最少的使用時間(異常情況不算)。另外,一定要放在try域中。

    setPriority():設置線程的優(yōu)先級。

    getPriority():獲取線程的優(yōu)先級。由不同操作系統(tǒng)的優(yōu)先級設定不太一樣,所以對優(yōu)先級的操作最好使用MIN_PRIORITY, NORM_PRIORITY, MIN_PRORITY來表示。

    setDaemon():用于將線程設置為Daemon線程,但必須在線程啟動之前。

    isDaemon():判斷線程是否為Daemon線程。

    isAlive():判斷線程是否還存在。

    join():用于不同線程間的聯系,當一個線程1調用另一個線程2join()方法,那么線程1在線程2結束前就會被掛起(除非設置timeout)。由于也可以被interrupt()打斷,所以也要放在try域中。

    currentThread():獲得當前線程,即執(zhí)行此方法的線程。

    getName():獲得線程的名字。

    getThreadGroup():獲得線程所屬的線程組。

     

    Daemon線程

    Daemon線程在后臺運行,當所有的非Daemon線程結束了,Daemon線程也隨之結束,另外在Daemon線程中創(chuàng)建的線程,都默認設置為Daemon線程。

     

     

    解決共享資源沖突

    防止資源沖突的兩種方法:同步塊和同步方法。

    同步塊:需要將要同步的代碼放到synchronizedobject{}中,由于每個對象均有一個監(jiān)視器(鎖),所以其中的object可為任意類的對象,靜態(tài)方法則默認使用類的Class對象。

    同步方法:將需要同步的代碼放到某一方法中,且將方法設置為synchronized。

     

    進程間的協(xié)作

    當發(fā)生nodify()的時候,發(fā)生wait()的地方才可以繼續(xù)運行,且它們必須放在同一個對象的同步塊或同步方法之中。

    wait()后將當前線程放到一個等待隊列中,nodify()后從等待隊列中隨意激活一個。

     

    線程組

    線程組是一個裝線程的容器。用Joshua Bloch,也就是負責修補和改進JDK 1.2Java容器類庫的那位Sun的軟件架構師,的話來講,它的意義可以概括為:“最好把線程組看成是一次不成功的實驗,或者就當它根本不存在?!?SPAN lang=EN-US>

     

    Java運行時的幾個系統(tǒng)線程

    Referrence Handler:系統(tǒng)用來控制引用的線程。(優(yōu)先級:10

    Finalizer:垃圾收集器。(優(yōu)先級:8

    Singnal Dispatcher:信號分配器。(優(yōu)先級:10

    Compiler Thread:用于優(yōu)化。(優(yōu)先級:10

     

     

    其他一些小問題

         JAVA中只有除longdouble以外的基本類型的賦值和返回式原子操作,其他的操作即使看上去非常像原子操作,我們也最好加上synchronized,這也算是JAVAC++的一點不同之處吧。最安全的原子操作只有讀取和對primitive賦值這兩種。

         如果你要防止訪問資源沖突,就索性把類中的所有的方法全都synchronize了,因為判斷哪些方法該synchronize很難的,而且synchronize對性能的影響也不大。

         對象使用完之后,要記得賦值為null,也就是釋放其內存空間。

         Thread類的對象不會因為沒有引用而被垃圾收集起收集掉,直到其線程結束。

         volatile標記用來排除優(yōu)化,否則,編譯器僅會讀取緩存中的變量。

     

     

    參考:《Think In JAVA第三版》、翁愷java教學視頻、孫鑫java教學視頻。

     

    Feedback

    # re: JAVA學習筆記——多線程(并發(fā))  回復  更多評論   

    2005-02-03 09:16 by JAVAV
    好,加油,繼續(xù)努力!

    # re: JAVA學習筆記——多線程(并發(fā))  回復  更多評論   

    2005-09-22 13:35 by todi
    good

    # re: JAVA學習筆記——多線程(并發(fā))  回復  更多評論   

    2007-08-17 13:55 by 天天看海
    喜歡研究JAVA多線程的朋友可以加入QQ群34237757

    # re: JAVA學習筆記——多線程(并發(fā))  回復  更多評論   

    2009-09-07 09:11 by lc402431247
    學習了。

    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲av成人一区二区三区| 成人永久福利免费观看| 国色精品卡一卡2卡3卡4卡免费 | 亚洲a∨无码男人的天堂| 久久av免费天堂小草播放| 国产a级特黄的片子视频免费| 久久亚洲精品人成综合网| 两个人看www免费视频| 日本成年免费网站| 噜噜噜亚洲色成人网站∨| a级毛片免费在线观看| 亚洲国产精品成人网址天堂| 亚洲精品宾馆在线精品酒店| 永久免费的网站在线观看| 亚洲国产精品久久网午夜| 亚洲人成免费电影| 亚洲五月激情综合图片区| 今天免费中文字幕视频| 亚洲自偷自偷偷色无码中文| www.av在线免费观看| 国产L精品国产亚洲区久久| 青娱乐在线视频免费观看| 国产一级特黄高清免费大片| 亚洲avav天堂av在线网毛片| 九九九精品成人免费视频| 亚洲一区电影在线观看| 精品成在人线AV无码免费看 | 亚洲国产精品久久人人爱| 久久99国产乱子伦精品免费| 亚洲激情视频网站| 日本免费人成在线网站| 亚洲国产日韩综合久久精品| 四虎www免费人成| 色屁屁www影院免费观看视频| 亚洲成av人片天堂网老年人| 一级特级女人18毛片免费视频 | 亚洲无砖砖区免费| 亚洲人成777在线播放| 日本免费人成黄页网观看视频| 真人无码作爱免费视频| 中文字幕不卡亚洲|