1. 程式人生 > >java基礎——Thread和Runnable的區別和聯絡

java基礎——Thread和Runnable的區別和聯絡

Java有兩種方式實現多執行緒,第一個是繼承Thread類,第二個是實現Runnable介面。他們之間的聯絡:

1、Thread類實現了Runable介面。

2、都需要重寫裡面Run方法。

他們之間的區別“

1、實現Runnable的類更具有健壯性,避免了單繼承的侷限。

2、Runnable更容易實現資源共享,能多個執行緒同時處理一個資源。

看一下以繼承Thread的賣票例子:

public static void main(String[] args) {

// TODO Auto-generated method stub

new MyThread().start();

new MyThread().start();

}

class MyThread extends Thread{

private int ticket = 5;

public void run(){

while(true){

System.out.println("Thread ticket = " + ticket--);

if(ticket < 0){

break;

}

}

}

}

輸出結果:

Thread ticket = 5

Thread ticket = 5

Thread ticket = 4

Thread ticket = 4

Thread ticket = 3

Thread ticket = 2

Thread ticket = 3

Thread ticket = 1

Thread ticket = 2

Thread ticket = 0

Thread ticket = 1

Thread ticket = 0

從以上輸出結果可以看出,我們創造了2個多執行緒物件,他們分別實現了買票任務,也就是一共賣了12張票。

實現Runnable介面的賣票例子:

public static void main(String[] args) {

// TODO Auto-generated method stub

MyThread2 m=new MyThread2();

new Thread(m).start();

new Thread(m).start();

}

class MyThread2 implements Runnable{

private int ticket = 5;

public void run(){

while(true){

System.out.println("Runnable ticket = " + ticket--);

if(ticket < 0){

break;

}

}

}

}

輸出結果:

Runnable ticket = 5

Runnable ticket = 4

Runnable ticket = 3

Runnable ticket = 2

Runnable ticket = 1

Runnable ticket = 0

從結果我們可以看到,雖然我們聲明瞭兩個執行緒,但是一共賣了6張票。他們實現了資源共享。PS:在實際開發中,一定要注意命名規範,其次上面實現Runable介面的例子由於同時操作一個資源,會出現執行緒不安全的情況,如果情況需要,我們需要進行同步操作。