程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 你選擇哪一種方式創建線程?,哪一種方式創建線程

你選擇哪一種方式創建線程?,哪一種方式創建線程

編輯:JAVA綜合教程

你選擇哪一種方式創建線程?,哪一種方式創建線程


拋開線程池不說,創建線程有兩種方式

創建線程的第一種方式:

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

示例:

四個窗口同時賣票,

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

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

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

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

class Ticket extends Thread
{
    private static int num = 50; //定義成static,四個線程共享50張票。
    public void run()
    {
        while(num>0)
        System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
    }
}

class Maipiao
{
    public static void main(String[] args) 
    {
        Ticket win1 = new Ticket();
        Ticket win2 = new Ticket();
        Ticket win3 = new Ticket();
        Ticket win4 = new Ticket();

        win1.start();
        win2.start();
        win3.start();
        win4.start();
    }
}

 這種方式創建線程不可取,為什麼呢?作比較,往下看

 創建線程的第二種方式:

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

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

//這個類只是為了描述線程的任務,跟線程沒有任何關系。
class Ticket implements Runnable
{
    private int num = 50; 
    public void run()
    {
        while(num>0)
        System.out.println(Thread.currentThread().getName()+"...sale..."+num--);
    }
}

class Maipiao
{
    public static void main(String[] args) 
    {
        Ticket t = new Ticket();
        
        Thread win1 = new Thread(t);
        Thread win2 = new Thread(t);
        Thread win3 = new Thread(t);
        Thread win4 = new Thread(t);

        win1.start();
        win2.start();
        win3.start();
        win4.start();
    }
}

通過代碼,總結得出:

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved