多線程的實現

多線程的實現

 

 

  (一)基本概念多線程

 

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

 

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

 

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

  

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

 

 

  (二)Thread類code

 

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

 

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

 

  ③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   萬有引力+

-

-

-

-

-

相關文章
相關標籤/搜索