1. 程式人生 > >多執行緒兩種實現方式的區別Thread Runnable

多執行緒兩種實現方式的區別Thread Runnable

多執行緒兩種實現方式的區別

多執行緒的兩種實現方式 Thread Runnable 兩者的區別

首先:使用Runnable介面與Thread類相比較,解決了單根繼承的定義侷限性,所以不管後面的區別和聯絡是什麼,至少這一點上就已經下了死定義– 如果要使用一定是用Runnable介面!

     觀察Thread類的定義

public class Thread extendsObjectimplements Runnable

       發現Thread類實現了Runnable介面,那麼程式就變成了以下的形式。

整個結構看起來很像是代理設計模式,如果是代理設計模式,客戶端呼叫的代理類的方法也應該是接口裡提供的方法,那麼也應該是run()才對。

使用Runnable介面可以比Thread類能夠更好的描述出資料共享的概念。此時的資料共享指的是多個執行緒訪問同一資源的操作

示例:每一個執行緒物件都必須通過start啟動

class MyThread extends Thread{
    private int titcket = 10;
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (this.titcket > 0){
                System.out.println("賣票,ticket = " 
+ this.titcket --);             }         }     } } public class TestThreadRunnable {     public static void main(String[] args) {         //由於MyThread類有start()方法,所以可以直接啟動MyThread myThread1 = new MyThread();         MyThread myThread2 = new MyThread();         MyThread myThread3 = new MyThread();        
myThread1.start();         myThread2.start();         myThread3.start();     } }

       本程式聲明瞭三個MyThread類的物件,並且分別呼叫了三次start()方法,啟動執行緒物件。但是發現最終的結果是:每一個執行緒物件都在賣各自的10張票。

此時並不存在資料共享的概念。

示例:利用Runnable來實現

class MyThread implements Runnable{
    private int titcket = 10;
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (this.titcket > 0){
                System.out.println("賣票,ticket = " + this.titcket --);
            }
        }
    }
}
public class TestThreadRunnable {
    public static void main(String[] args) {
        //由於MyThread類有start()方法,所以可以直接啟動MyThread myThread = new MyThread();
        new Thread(myThread).start();
        new Thread(myThread).start();
        new Thread(myThread).start();
    }
}

此時也屬於三個執行緒物件,區別是:這個三個執行緒物件都直接佔用了一個MyThread類的物件引用,也就是說這三個執行緒物件都直接訪問同一個資料資源。

1.    請解釋Thread類與Runnable介面實現多執行緒的區別

2.    請解釋多執行緒兩種實現方式的區別

·Thread類是Runnable介面實現多執行緒可以避免單根繼承侷限性;

Runnable介面實現的多執行緒可以比Thread類實現的多執行緒更加清楚的描述資料共享的概念;

3.    請寫出多執行緒兩種實現操作。

·把Thread類繼承的方式和Runnable介面實現的方式程式碼都寫出來