多線程(五)---Runnable接口與Thread類比較

多線程(五)---Runnable與Thread類比較

(一)Thread類,模擬售票發現線程資源被共享,如何解決此問題?

Thread

1 : 能夠用static修飾符、或者單例模式,能夠暫時解決此問題,不過不建議使用。

2 : 代碼分析堆棧中的狀態?

內存區域分析

注:屢次啓動線程是非法的。特別是當線程已經執行結束後,不能從新啓動。將拋出IllegalThreadStateException錯誤

此時咱們須要將線程資源和線程任務進行分離!!!!

(二)Runnable實現方式

1:定義一個類實現Runnable

2:覆蓋Runnable接口中的run方法,並將線程任務寫在方法中

3:經過Thread類建立線程對象,並將實現Runnable接口對象,做爲Thread類構造函數的參數進行傳遞

4:啓動start方法,開啓線程

class SaleTicket2 implements Runnable{
    private int tickets = 100;
    public void run(){
        while (true){
            if (tickets>0){
                System.out.println(Thread.currentThread().getName()+"------tickets:"+tickets--);
            }
        }
    }
}
public class TicketDemo2 {
    public static void main(String[] args) {
        SaleTicket2 t = new SaleTicket2(); // 線程任務對象
        Thread t1 = new Thread(t);// 建立線程對象而且並將實現了Runnable接口對象做爲Thread構造函數的參數進行傳遞
        Thread t2 = new Thread(t);
        Thread t3 = new Thread(t);
        Thread t4 = new Thread(t);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

(三)實現Runnable接口與繼承Thread類兩種方式分析?

實現Runnable接口的好處:

1: 避免了繼承Thread類的單繼承的侷限性

2: Runnable接口的出現更符合面向對象,將線程單獨的進行對象封裝

3: Runnable接口出現,下降了線程對象和線程任務的耦合性

因此綜上所述:建立線程推薦使用Runnable接口多線程

相關文章
相關標籤/搜索