1樓:匿名使用者
foxcoming我就是說b執行緒等待sleeper2執行緒執行完然後再繼續執行,請看清楚別人的回答再下結論
執行緒 a sleeper1列印0 //先執行main函式的執行緒sleep1的run方法中的迴圈輸出0,然後睡眠
執行緒 a sleeper1interrupted//執行到sleep1被打斷前,主線程執行了**sleeper2=new sleeper("執行緒 a sleeper2",1500);
joiner joiner=new joiner("執行緒 b",sleeper2);
sleeper1.interrupt(); ,前兩個執行緒但是還沒有開始跑因為沒有拿到cpu時間片,
執行緒 a sleeper1執行完畢//因為捕捉到interrupt異常,a sleep1退出迴圈,執行完畢
執行緒 a sleeper2列印0//sleep2執行緒開始跑執行到列印0,睡眠
執行緒 b開始執行//然後執行緒b分配到cpu時間片,開始執行
執行緒 a sleeper2開始 //使用jion()方法,因為b中使用了sleep2.join()方法,導致sleep2搶占cpu時間片,優先全部執行
執行緒 a sleeper2列印1
執行緒 a sleeper2列印2
執行緒 a sleeper2列印3
執行緒 a sleeper2列印4
執行緒 a sleeper2執行完畢
執行緒 b列印 5//然後才輪到執行緒b開始執行
執行緒 b列印 4
執行緒 b列印 3
執行緒 b列印 2
執行緒 b列印 1
執行緒 b執行完畢
2樓:匿名使用者
join是指當前執行緒等待目標執行緒執行結束後才繼續執行,所以樓上的回答是反了。。
執行緒寫,另執行緒讀,需要加鎖嗎,乙個執行緒寫,另乙個執行緒讀,需要加鎖嗎
多執行緒和多程序最大的不同在於,多程序中,同乙個變數,各自有乙份拷貝存在於每個程序中,互不影響,而多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。來看看多個執行緒同時操作乙個變數怎麼...
求教題目關於矩陣的跡,乙個關於矩陣跡的問題
只需把你得到的式子tr ab tr tut b tr ut bt 往下再寫一步 令d 2 u,其中d是對角回 陣,對角元是答u的對角元的正的平方根。因此tr ab tr dt btd 第二個括號裡是半正定陣,跡為0的話只能是零矩陣。注意到dt btd 0和d 2t bt 0等價,因此得到結論。跡就是...
關於MFC多執行緒的疑惑始終編譯通不過?求解答
createthread的那個函式不可以是類的非靜態成員函式你可以寫乙個函式來包裝一下它。看你在用mfc吧,用afxbeginthread代替createthread是正確的做法。不過afxbeginthread的用法我不清楚因為我不用mfc 具體說來,比如這樣 class cmultithread...