publicclass tt implements
runnable
public
void m2() throws exception
public
void
run()
catch
(exception e)
}public
static
void main(string args) throws
exception
}
指令碼執行結果都是2000,為什麼是這樣呢?我的理解是tt是執行緒類tt的例項化物件,相當於tt是主線程來執行,而子執行緒t是在tt的基礎上建立的乙個新的執行緒,子執行緒的建立需要時間,所以主線程tt.m2()先執行,等到tt.m2()執行第一步之後,開始休眠2500ms,這時候執行緒位置就被子執行緒t搶過去了,子執行緒t執行第一步,然後將b的值變為1000,這時候又開始休眠5000ms,這時候又切回了主線程m2,m2將b變為2000,執行第二步,然後主線程列印tt.b = 2000,主線程執行完了,切回子執行緒t,子執行緒t執行第二步,然後列印 b = 2000
開始執行m2---第一步
開始執行m1---第一步
開始執行m2---第二步
2000
開始執行m1---第二步
b = 2000
還有一種情況,就是m1和m2都加鎖,執行順序分別是主線程tt.m2()-->m2第一步-->休眠2500ms-->b = 2000-->m2第二步-->列印tt.b = 2000,然後切換回m1, m1第一步-->b = 1000 --> 休眠5000ms --> m1第二步 --> b = 1000,也就是兩個方法都加鎖,先乙個執行緒執行完,再執行另個執行緒的方法
publicclass tt2 implements
runnable
public
synchronized
void m2() throws exception
public
void
run()
catch
(exception e)
}public
static
void main(string args) throws
exception
}
所以結果是
開始執行m2---第一步開始執行m2---第二步
2000開始執行m1---第一步
開始執行m1---第二步
b = 1000
關於java執行緒的乙個問題
最近在寫乙個程式.其中就遇到了這樣乙個問題.我希望實現兩個或多個執行緒,而這些執行緒的順序是 thread thread 2,5,main a 這是執行緒2呼叫b時列印出的 thread thread 3,5,main a 這是執行緒3呼叫b時列印出的 上面的順序是我所希望的.但往往會是這樣的結果 ...
乙個關於自旋鎖 spin lock 問題的討論
前陣子有發短訊息問 在研究自旋鎖的時候,發現在 spin lock irq函式,也就是在自旋鎖中關閉中的這類函式中,既然已經關閉了本地中斷,再禁止搶占有沒有多餘。也就是說,既然本地中斷已經禁止了,在本處理器上是無法被打斷的,本地排程器也無法執行,也就不可以被本地排程程式排程出去.從spinlock設...
關於執行緒的乙個練習
下面是乙個我們學習執行緒的乙個小例子,大家看看。實現兩個執行緒,a為控制線程,b為工作執行緒,要求 1 從a中讀入乙個整數 2 根據a中讀入的數字計算其階乘,同時將結果輸入到d盤根目錄下的1.txt檔案中。該結果需要重複寫入1000次,但當使用者輸入的整數發生改變時,中斷寫入,並計算新數字的階乘,將...