Java多線程:實現Runnable接口創建線程方式詳解


先看例子:###

/**實現Runnable接口創建線程步驟:
 * 1、創建一個實現Runnable接口的類
 * 2、重寫Runnable類中抽象的run()方法
 * 3、創建實現類的對象
 * 4、聲明Thread類,同時將實現類對象作為參數傳遞
 * 5、用Thread類的對象調用start()
 */
//例子:多線程售票(暫未安全同步)
class MyThread implements Runnable{
    private int num = 100;
    public void run(){
        while (true){
            System.out.println(Thread.currentThread().getName()+"票號:"+num--);
            if(num == 0)
                break;
        }
    }
}
public class ThreadTest2 {
    public static void main(String[] args) {
        //m相當於是提供了線程所要執行的run(),所以可以供不同線程調用
        MyThread myThread = new MyThread();

        //將Runnable實現類的對象傳遞給Thread類中的Runnable類型的屬性,由此調實現用
        Thread t = new Thread(myThread);
        Thread t1 = new Thread(myThread);
        Thread t2 = new Thread(myThread);
        //設置線程名
        t.setName("窗口1:");
        t1.setName("窗口2:");
        t2.setName("窗口3:");
        //通過調用start執行myThread對象的run(),實現三個線程共用一個方法,但是對象始終只有一個,記錄票數的子類也只有一個
        t.start();
        t1.start();
        t2.start();
    }
}

解析:

通過源碼發現Thread類也實現了Runnable接口,通過所以此創建實例的過程是一個Runnable的實現類對象(myThread),傳遞給另一個Runnable實現類對象(t、t1、t2)的過程,而Thread類中還定義了個Runnable類型的屬性,用於配合接收Thread類的帶參構造器傳遞過來的Runnable類型的對象,現在對象有了,要調用什么姿勢還不是拍拍屁股的事情?(實際是Thread類中的run()判斷出有Runnable對象傳遞進來了,就通過該對象調用run())

補充:忽略安全同步問題,例子實現了多線程售票,可以看出start()方法負責開啟線程並調用負責線程執行內容的run()方法。


免責聲明!

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



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