Java多線程

一、Java多線程機制

    1、java的多線程機制
        Java虛擬機快速地把控制從一個線程切換到另一個線程。每個應用程序都有一個缺省的線程。
        
    2、線程的狀態和生命週期
        線程的一個完整的生命週期主要經歷如下四個狀態:
        (1)、新建
        (2)、運行:線程必須調用start()方法通知JVM,這樣JVM就會知道又有一個新的線程排隊等候切換了
        (3)、中斷:有四種中斷方式
            JVM將CPU資源從當前線程切換到其他線程
            線程調用sleep(int millsecond)方法
            線程執行wait()方法
            線程執行某個操作進入阻塞狀態
        (4)、死亡
    
    3、線程調度與優先級
        JVM中的線程調度器負責管理線程,調度器把線程的優先級分爲10個級別,Java調度器的任務是使高優先級的線程能始終運行,一旦時間片空閒,則使其有相同優先級的線程
         以輪流的方式順序使用時間片。

二、Thread類實現多線程
    1、Thread的子類創建線程
        在Java語言中,用Thread類或者子類創建線程對象。
        在編寫Thread類的子類時,需要重寫父類的run()方法,目的是規定線程的具體操作,否則線程什麼也不做,因爲父類的run()方法中沒有任何操作語句。

三、Runnable接口實現多線程
    1、使用Thread子類創建線程的優點:可以在子類中增加新的成員變量,也可以增加新的方法。
       但是Java不支持多繼承,Thread類的子類不能再擴展其他的類
    
    2、Runnable 接口與目標對象
       創建線程的另一個途徑就是使用Thread類直接創建線程對象,使用Thread創建線程通常的構造方法:Thread (Runnable target);
       在創建線程對象時必須向構造方法的參數傳遞一個實現Runnable接口類的實例,該實例對象稱作所創建線程的目標對象,當線程
       調用start()方法後,一旦輪到它來享用CPU資源,目標對象就會自動調用接口中的run方法。

    3、實現Runnable和繼承Thread的區別
       (1)、一個類只能繼承一個父類,存在侷限;一個類可以實現多個接口
       (2)、在實現Runnable接口的時候調用Thread(Runnable target)創建線程時,使用同一個Runnable實例,則建立的多線程的實例變量
        也是共享的,但是通過Thread類是不能用一個實例建立多個線程,故而實現Runnable接口適合於資源共享。當然,繼承Thread類
        也能共享變量,能共享Thread類的static變量。
       (3)、Runnable接口和Thread之間的聯繫
        public class Thread extends Object implements Runnable
        可以看出Thread類也是Runnable接口的子類。

四、線程常用方法和線程同步
    1、線程的常用方法
        (1)、start():線程調用該方法將啓動線程
        (2)、run():用來定義線程對象被調度之後所執行的操作
        (3)、sleep(int millsecond); 優先級高的線程可以在他的run()方法中調用sleep方法來使自己放棄CPU資源,休眠一段時間
        (4)、isAlive():在線程的run()方法結束之前,即沒有進入死亡狀態之前,線程調用isAlive()返回true。
        (5)、currentThread():該方法是Thread類中的類方法,可以用類名調用,該方法返回當前正在使用CPU資源的線程。
        (6)、interrupt():一個佔有CPU資源的線程可以讓休眠的線程調用interrupt()方法“吵醒”自己,即導致休眠的線程發生InterruptedException異常,從而結束休眠,重新排隊等待CPU資源。

    2、線程同步
        所謂線程同步就是若干個線程都需要使用一個synchronized修飾的方法,即程序中的若干線程都使用一個方法,這個方法用synchronized給予了修飾。
        多個線程調用synchronized方法必須遵守同步機制:當一個線程使用這個方法時,其他線程想使用這個方法時必須等待,直到線程使用完該方法。在使用多線程解決許多實際問題時,可能要把某些
        修改數據的方法用關鍵字synchronized來修飾。

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