首頁 >Java >java教程 >Java多執行緒中關於Thread與runnable的差異詳解

Java多執行緒中關於Thread與runnable的差異詳解

黄舟
黄舟原創
2017-08-20 09:17:472050瀏覽

這篇文章主要介紹了java 多線程Thread與runnable的區別的相關資料,java線程有兩種方法繼承thread類與實現runnable接口,下面就提供實例幫助大家理解,需要的朋友可以參考

java 多執行緒Thread與runnable的差異

java中實作多執行緒的方法有兩種:繼承Thread類別和實作runnable介面

1,繼承Thread類,重寫父類別run()方法


#
  public class thread1 extends Thread {
 
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是线程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.run();
        th2.run();
    }
   }

run()方法只是普通的方法,是順序執行的,即th1.run()執行完成後才執行th2.run(),這樣寫只用一個主執行緒。多執行緒就失去了意義,所以應該用start()方法來啟動執行緒,start()方法會自動呼叫run()方法。上述程式碼改為:


 public class thread1 extends Thread {
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("我是线程"+this.getId());
        }
    }
 
    public static void main(String[] args) {
        thread1 th1 = new thread1();
        thread1 th2 = new thread1();
        th1.start();
        th2.start();
    }
}

透過start()方法啟動一個新的執行緒。這樣不管th1.start()呼叫的run()方法是否執行完,都繼續執行th2.start()如果下面有別的程式碼也同樣不需要等待th2.start()執行完成,而繼續執行。 (輸出的執行緒id是無規則交替輸出的) 

2,實作runnable介面


public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("线程A");
        thread2 th2 = new thread2("Thread-B");
        th1.run();
        th2.run();
    }
}

和Thread的run方法一樣Runnable的run只是普通方法,在main方法中th2.run()必須等待th1.run()執行完成後才能執行,程式只用一個執行緒。要多執行緒的目的,也要透過Thread的start()方法(runnable是沒有start方法)。上述程式碼修改為:


public class thread2 implements Runnable {
 
    public String ThreadName;
    
    public thread2(String tName){
        ThreadName = tName;
    }
    
    
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println(ThreadName);
        }
    }
    
    public static void main(String[] args) {
        thread2 th1 = new thread2("线程A");
        thread2 th2 = new thread2("Thread-B");
        Thread myth1 = new Thread(th1);
        Thread myth2 = new Thread(th2);
        myth1.start();
        myth2.start();
    }
}

 總結:實作java多執行緒的2種方式,runable是接口,thread是類,runnable只提供一個run方法,建議使用runable實作java多執行緒,不管如何,最終都需要透過thread.start()來使執行緒處於可運行狀態。

以上是Java多執行緒中關於Thread與runnable的差異詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn