Java多線程實現方式及生命週期

Java中線程的實現方式

1.實現Runnable接口

class MyThread implements Runnable{
      private String name ;       // 表示線程的名稱 
      public MyThread(String name){ 
          this.name = name ;      // 通過構造方法配置name屬性 
      } 
      public void run(){  // 覆寫run()方法,作爲線程 的操作主體 
          for(int i=0;i<10;i++){ 
              System.out.println(name + "運行,i = " + i) ; 
         } 
     } 
};

public class RunnableDemo01{ 
     public static void main(String args[]){ 
         MyThread mt1 = new MyThread("線程A ") ;    // 實例化對象 
         MyThread mt2 = new MyThread("線程B ") ;    // 實例化對象 
         Thread t1 = new Thread(mt1) ;       // 實例化Thread類對象 
         Thread t2 = new Thread(mt2) ;       // 實例化Thread類對象 
         t1.start() ;    // 啓動多線程 
         t2.start() ;    // 啓動多線程 
     } 
};

2.繼承Thread類

​
class MyThread extends Thread{
      private String name ;       // 表示線程的名稱 
      public MyThread(String name){ 
          this.name = name ;      // 通過構造方法配置name屬性 
      } 
      public void run(){  // 覆寫run()方法,作爲線程 的操作主體 
          for(int i=0;i<10;i++){ 
              System.out.println(name + "運行,i = " + i) ; 
         } 
     } 
};

public class ThreadDemo01{ 
     public static void main(String args[]){ 
         MyThread mt1 = new MyThread("線程A ") ;    // 實例化對象 
         MyThread mt2 = new MyThread("線程B ") ;    // 實例化對象  
         mt1.start() ;    // 啓動多線程 
         mt2.start() ;    // 啓動多線程 
     } 
};

​

線程的5種狀態

線程一般具有5種狀態,分別是創建、就緒、運行、阻塞、終止,各狀態說明如下:

  • 創建狀態 

在程序中用構造方法創建了一個線程對象後,新的線程對象便處於新建狀態,此時它已經有了相應的內存空間和其他資源,但還處於不可運行狀態。新建一個線程對象可採用Thread 類的構造方法來實現,例如 “Thread thread=new Thread()”。

  • 就緒狀態 

新建線程對象後,調用該線程的 start() 方法就可以啓動線程。當線程啓動時,線程進入就緒狀態。此時,線程將進入線程隊列排隊,等待 CPU 服務,這表明它已經具備了運行條件。

  • 運行狀態 

當就緒狀態被調用並獲得處理器資源時,線程就進入了運行狀態。此時,自動調用該線程對象的 run() 方法。run() 方法定義該線程的操作和功能。

  • 阻塞狀態 

一個正在執行的線程在某些特殊情況下,如被人爲掛起或需要執行耗時的輸入/輸出操作,會讓 CPU 暫時中止自己的執行,進入阻塞狀態。在可執行狀態下,如果調用sleep(),suspend(),wait() 等方法,線程都將進入阻塞狀態,發生阻塞時線程不能進入排隊隊列,只有當引起阻塞的原因被消除後,線程纔可以轉入就緒狀態。

  • 死亡狀態 

線程調用 stop() 方法時或 run() 方法執行結束後,即處於死亡狀態。處於死亡狀態的線程不具有繼續運行的能力。

線程同步

一個多線程程序如果通過Runnable實現,則類中的屬性會被多個線程共享,那麼多線程操作同一個資源時就可能出現資源同步問題。

解決方法:

1.同步代碼塊

synchronized(同步對象){
   需要同步的代碼
}

2.同步方法

synchronized 方法返回值 方法名稱(參數列表){ 
 
}

 

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