Java中創建線程的兩種方式


創建線程的第一種方式:

  1. 創建一個類繼承Thread
  2. 重寫Thread中的run方法 (創建線程是為了執行任務 任務代碼必須有存儲位置,run方法就是任務代碼的存儲位置。)
  3. 創建子類對象,其實就是在創建線程
  4. 啟動線程start()

這種方式的特點(缺陷):線程任務和線程是綁定在一起的。

示例:

四個窗口同時賣票,

因為是同時,所以使用多線程。

創建四個線程,都是賣票。

因為都是賣票,所以四個線程的任務是一樣的。

只需要定義一個類繼承Thread。

 1 class Ticket extends Thread
 2 {
 3     private static int num = 50; //定義成static,四個線程共享50張票。
 4     public void run()
 5     {
 6         while(num>0)
 7         System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
 8     }
 9 }
10 
11 class Maipiao
12 {
13     public static void main(String[] args) 
14     {
15         Ticket win1 = new Ticket();
16         Ticket win2 = new Ticket();
17         Ticket win3 = new Ticket();
18         Ticket win4 = new Ticket();
19 
20         win1.start();
21         win2.start();
22         win3.start();
23         win4.start();
24     }
25 }

 

為了解決四個線程共享票的問題,需要使用創建線程的第二種方式:

  1. 創建實現了Runnable接口的子類
  2. 重寫Runnable接口中的run方法
  3. 創建實現了Runnable接口的子類的對象
  4. 創建Thread類的對象,也就是在創建線程
  5. 把實現了Runnable接口的子類對象作為參數傳遞給Thread類的構造方法

這種方式的特點是:把線程任務進行了描述,也就是面向對象,從而實現了線程任務和線程對象的分離。線程執行什么任務不再重要,只要是實現了Runnable接口的子類對象都可以作為參數傳遞給Thread的構造方法,此方式較為靈活。

第二種方式還有一個好處是實現接口了,還不影響繼承其他父類。

 1 //這個類只是為了描述線程的任務,跟線程沒有任何關系。
 2 class Ticket implements Runnable
 3 {
 4     private int num = 50; 
 5     public void run()
 6     {
 7         while(num>0)
 8         System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
 9     }
10 }
11 
12 class Maipiao
13 {
14     public static void main(String[] args) 
15     {
16         Ticket t = new Ticket();
17         
18         Thread win1 = new Thread(t);
19         Thread win2 = new Thread(t);
20         Thread win3 = new Thread(t);
21         Thread win4 = new Thread(t);
22 
23         win1.start();
24         win2.start();
25         win3.start();
26         win4.start();
27     }
28 }

 總結:為什么創建線程的第二種方式可以解決賣票問題?

 第一種創建線程的方式:線程和線程任務是綁定在一起的,創建了4個線程就創建了4份資源。

 第二種創建線程的方式:線程和線程任務進行了分離,只需要創建一個任務,讓4個線程分別去執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM