Java 中實現(xiàn)多線程有兩種方法:繼承 Thread 類、實現(xiàn) Runnable 接口,在程序開發(fā)中只要是多線程,肯定永遠以實現(xiàn) Runnable 接口為主,因為實現(xiàn) Runnable 接口相比繼承 Thread 類有如下優(yōu)勢:
下面以典型的買票程序(基本都是以這個為例子)為例,來說明二者的區(qū)別。
首先通過繼承 Thread 類實現(xiàn),代碼如下:
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();
}
}
執(zhí)行結果如下:
http://wiki.jikexueyuan.com/project/java-concurrency/images/result.png" alt="" />
從結果中可以看出,每個線程單獨賣了 5 張票,即獨立地完成了買票的任務,但實際應用中,比如火車站售票,需要多個線程去共同完成任務,在本例中,即多個線程共同買 5 張票。
下面是通過實現(xiàn) Runnable 接口實現(xiàn)的多線程程序,代碼如下:
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();
new Thread(my).start();
}
}
執(zhí)行結果如下:
http://wiki.jikexueyuan.com/project/java-concurrency/images/result1.png" alt="" />
從結果中可以看出,三個線程一共賣了 5 張票,即它們共同完成了買票的任務,實現(xiàn)了資源的共享。
針對以上代碼補充三點: