Java線程中,Thread和Runnable創建線程的區別

一、Thread創建線程,通過新建類繼承Thread類,重寫run方法,然後在main方法中start(),創建並啓動線程.

public class MyThread extends Thread{//除了構造方法和私有屬性其他的都可以被繼承下來
    @Override//重寫了父類Thread的run方法.
//在main方法start()創建並啓動線程時,會調用此方法.
    public void run(){
    System.out.println("子線程的信息:"+Thread.currentThread().toString());
}
    public MyThread(String name){
        super(name);
    }
}
public class Test{
    public statci void main(String[] args){
        MyThread mt = new MyThread("子線程");
        mt.start();//創建並啓動線程,並調用MyThread中重寫過後的run方法
    }
}

二、通過實現Runnable接口來創建線程

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
    }
}
public class ThreadTest{
    public static void main(String[] args){
        MyRunnable mr = new MyRunnable();
        Thread t = new Thread(mr,"測試線程");
        t.start();
    }
}

通過Thread.currentThread().getName()可以查詢線程的名稱.

三、匿名內部類創建線程

public class AnonymousInnerClassThread {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println("Thread: "+i);
                }
            }
        };
        new Thread(r).start();
        for (int i = 0; i < 20; i++) {
            System.out.println("Thread II: "+i);
        }
    }
}

通過創建一個匿名內部類來啓動線程。匿名內部類,匿的是類的名字。通過一個匿名的類來implements接口重寫其中的run方法。Thread中的構造方法有一個Thread(Runnable target).此時的r就相當於一個匿名類實現的target對象.

Thread和Runnable的區別
A:避免了Java單繼承的侷限性;
說明:如果使用方式一,那麼在Java中一個類只能有一個直接父類,如果一個類已經繼承其他的父類,那麼當前這
個類中假如有需要多線程操作的代碼,這時這個類是無法再繼承Thread類的。這樣就會導致當前這個類中的某些
需要多線程執行的任務代碼就無法被線程去執行。
B:把線程代碼和任務的代碼分離,解耦合(解除線程代碼和任務的代碼模塊之間的依賴關係)。代碼的擴展性非常
好;
說明:Thread類是專門負責描述線程本身的。Thread類可以對線程進行各種各樣的操作。如果使用第一種方式,
那麼把線程要執行的任務也交給了Thread類。這樣就會導致操作線程本身的功能和線程要執行的任務功能嚴重的
耦合在一起。
但是方式二,自定義一個類來實現Runnable接口,這樣就把任務抽取到Runnable接口中,在這個接口中定義線程
需要執行的任務的規則。當需要明確線程的任務時,我們就讓這個類實現Runnable接口,只要實現Runnable接口
的類,就相當於明確了線程需要執行的任務。
當一個類實現Runnable接口,就相當於有了線程的任務,可是還沒有線程本身這個對象。這時我們就可以直接使
用Thread這個類創建出線程,然後把任務交給線程。這樣就達到任務和線程的分離以及結合。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章