1. 程式人生 > >Java多執行緒程式設計之Thread和Runnable的區別

Java多執行緒程式設計之Thread和Runnable的區別

Thread 和Runnable的最大區別就在於共享資料。每當你new一個Thread的時候,虛擬機器會給你new出來的Thread分配一塊單獨的記憶體。Thread和Thread物件之間的資料不共享。如下:

Example1:

class Thread1 extends Thread{

private int temp = 0;

public void run(){

操作temp變數;

輸出temp變數作為記錄

}

}

分別開三個執行緒或者更多觀察來觀察會發現,這三個執行緒都是從0開始累加的,這就說明temp變數是不被共享的。

new Thread().start();

new Thread().start();

new Thread().start();

Example2:

class Thread2 implements Runnable{

private int temp = 0;

public void run(){

操作temp

輸出temp變數作為記錄

}

}

執行example1相同的操作

Thread2 t2 = new Thread2();

new Thread(t2).start();

new Thread(t2).start();

new Thread(t2).start();

通過觀察程式輸出你會發現,這三個執行緒執行的時候,輸出的內容就是從0開始依次累加的。

即由於temp變數被共享,所以,多個執行緒會對其進行同時操作。

這裡需要注意的一點就是,由於Thread2物件被多個執行緒共享,所以,在同時開始進行多執行緒操作的時候很容易造成執行緒異常,

為了保證執行緒安全,建議在使用共享資源的地方新增同步鎖來保證執行緒執行安全。