Java中實現多線程有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多線程,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Thread類有如下優勢:
1、可以避免由於Java的單繼承特性而帶來的局限;
2、增強程式的健壯性,代碼能夠被多個線程共用,代碼與資料是獨立的;
3、適合多個相同程式碼的線程區處理同一資源的情況。
下面以典型的買票程式(基本都是以這個為例子)為例,來說明二者的區別。
首先通過繼承Thread類實現,代碼如下:
[java] view plain copy class MyThread extends Thread{ private int ticket = 5; public void run(){ for (int i=0;i<10;i++) { if(ticket > 0){ System.out.println("ticket = " + ticket--); } } } } public class ThreadDemo{ public static void main(String[] args){ new MyThread().start(); new MyThread().start(); new MyThread().start(); } } 某次的執行結果如下:
從結果中可以看出,每個線程單獨賣了5張票,即獨立地完成了買票的任務,但實際應用中,比如火車站售票,需要多個線程去共同完成任務,在本例中,即多個線程共同買5張票。
下面是通過實現Runnable介面實現的多線程程式,代碼如下:
[java] view plain copy class MyThread implements Runnable{ private int ticket = 5; public void run(){ for (int i=0;i<10;i++) { if(ticket > 0){ System.out.println("ticket = " + ticket--); } } } } public class RunnableDemo{ public static void main(String[] args){ MyThread my = new MyThread(); new Thread(my).start(); new Thread(my).start();