java學習筆記(線程)

 1)、 實現線程的兩種方法:
       a、第一種:繼承Thread線程類,然後重寫他的run方法。因爲此時Thread類的Runnable成員變量爲null,所以此時Thread類的run()方法不執行任何動作。當想要啓動線程時必須要調用start()方法,不能調用run()方法,當用線程類調用run()方法,這是的線程類類就變成普通的類了。
       b、第二種:實現Runnable接口,然後實現他的run方法。
    2)、當想要停止運行線程時,不要調用stop()方法,因爲stop()方法不是線程安全的。推薦方式是:將run()方法內的執行代碼放在一個while循環內,當爲true時線程繼續執行,當爲false時退出線程的執行。
    3)、線程的狀態:
         a、創建狀態:當用new操作符創建一個新的線程對象是,該線程就進入的創建狀態。此時的狀態並沒有分配資源。
         b、可運行狀態:當線程對象執行start()方法後,系統將爲線程分配需要的系統資源,安排其運行,線程此時就會去掉run()方法,這時線程就處於可運行狀態了。注意:此時線程還並未真正執行。
         c、不可運行狀態:
         d、消亡狀態
    4)、如果一個對象有多個synchronized方法,某一時刻某個線程已經進入到了某個synchronized方法,那麼在該方法沒有執行完畢前,其他線程時無法訪問該對象的任何synchronized方法的。

    5)、如果某個synchronized方法是static的,那麼當線程訪問該方法時,他得鎖斌不是synchronized方法所在的對象,而是synchronized方法所在的對象所對應的Class對象,因爲Java中無論一個類有多少個對象,這些類會對應唯一一個Class對象。

    6)、線程同步方法

         wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
         sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
         notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先級。
         notityAll ():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章