1. 程式人生 > >多線程的實現

多線程的實現

分配 exc 方法 waiting The 概念 cpu 分享圖片 alt

多線程的實現

  (一)基本概念

  ①程序:一個指令的集合;

  ②進程:正在執行中的程序;(資源分配的單位)

  ③線程:進程中的一個執行路徑。(調度和執行的單位)

  

  (註:一個進程中必須存在主線程,主線程運行的代碼存在main方法中)

  (二)Thread類

  ①Thread(Runnable target, String name)構造方法:分配新的 Thread 對象。

  ②currentThread方法:返回對當前正在執行的線程對象的引用。

  ③getName方法:返回該線程的名稱。

  ④getState方法:返回該線程的狀態。

  返回值: NEW——新生狀態;    RUNNABLE——運行狀態;   BLOCKED——阻塞狀態;   WAITING——等待喚醒;      

      TIMED_WAITING——等待指定時間長度;    TERMINATED——死亡狀態。

  ⑤getPriority方法:返回線程的優先級。

  ⑥setPriority(int newPriority):更改線程的優先級(優先級設定在1~10之間,默認值為5)。

  ⑦isAlive方法:測試線程是否處於活動狀態。

  返回值:線程處於活動狀態——true;否則——false。

  ⑧join方法:等待該線程終止(該線程強制執行,其它線程處於阻塞狀態)。

  ⑨sleep(long millis)方法:在指定的毫秒數內讓當前正在執行的線程休眠,線程處於阻塞狀態。

  ⑩yield方法:暫停當前線程對象執行一次,該線程返回就緒狀態。

  (三)多線程的實現1——繼承Thread類

 

  ①繼承Thread類;

  ②重寫run方法,將要執行的代碼寫入run方法中;

  ③創建線程對象,調用start方法啟動線程。

public class Test {
       public static void main(String[] args) {
    MyThread mt = new MyThread();
    mt.start();
          for (int i = 0; i < 100; i++) {
             System.out.println("Main" + i);
         }
     }
}

public class MyThread extends Thread{
       @Override
       public void run() {
             for (int i = 0; i < 100; i++) {
                    System.out.println("MyThread"+i);
             }
       }
}

  

  (四)多線程的實現2——實現Runnable接口

  

  ①創建Thread類,實現Runnable接口;

  ②實現run方法;

  ③創建一個實現Runnable接口的類的對象,用該對象來構造Thread對象;

  ④調用start方法啟動線程。

public class Test {
       public static void main(String[] args) {
         MyThread02 mt = new MyThread02();
              Thread th = new Thread(mt);
              th.start();
              for (int i = 0; i < 100; i++) {
                     System.out.println("Main" + i);
              }
       }
}

public class MyThread02 implements Runnable{
     @Override
     public void run() {
          for (int i = 0; i < 100; i++) {
                 System.out.println("MyThread"+i);
          }
     }
}

  (五)多線程的實現3——實現Callable接口

  

  

  ①創建Thread類,實現Callable接口;

  ②創建一個實現Callable接口的類的對象

  ③創建一FutureTask的對象,用該對象來構造Thread對象;

  ④調用start方法啟動線程。

public class Test {
  public static void main(String[] args) {
    Callable<T> oneCallable = new SomeCallable<T>();
    FutureTask<T> oneTask = new FutureTask<T>(oneCallable);
    Thread oneThread = new Thread(oneTask);
    oneThread.start();
  }
}
   

public interface Callable<T>   { 
  T call() throws Exception;   
} 

public class SomeCallable<T> extends OtherClass implements Callable<T> {

    @Override
    public T call() throws Exception {
        return null;
    }
}

  (六)線程的狀態

  

  ①新生狀態:無資源、無資格;

  ②就緒狀態:有資格、無資源;

  ③運行狀態:有資源、有資格;

  ④阻塞狀態:無資格、讓資源;

  ⑤死亡狀態:線程結束。

  (七)線程的運行過程

技術分享圖片


  過程①:調用start方法,進入就緒狀態;

  過程②:CPU調度該線程,進入運行狀態;

  過程③:run方法執行完畢、線程被強制結束或拋出未捕獲異常;

  過程④:發生導致線程阻塞的事件;

  過程⑤:阻塞的事件結束,重新進入就緒狀態;

  過程⑥:CPU片段時間到,線程未執行完畢,返回就緒狀態。

———————————————————————————————————————————————————————————————————

The end @ 萬有引力+

-

-

-

-

-

多線程的實現