Java多執行緒程式設計之Thread和Runnable的區別
阿新 • • 發佈:2019-01-29
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物件被多個執行緒共享,所以,在同時開始進行多執行緒操作的時候很容易造成執行緒異常,
為了保證執行緒安全,建議在使用共享資源的地方新增同步鎖來保證執行緒執行安全。