這篇文章主要介紹了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中文網其他相關文章!