首先先看乙個例子:
public
class
joindemo
implements
runnable
}public
static
void
main(string args)
}
其實我希望這個程式的輸出結果能夠為5,但是通常情況下很難遇到這種情況.原因如下:當主線程main()執行到system.out.println(n)這條語句時,執行緒t可能正在分配資源準備執行,但是還沒有真正執行.正因為執行緒在啟動時需要分配資源,當main()方法執行完t.start()後,緊接著執行system.out.println(n),這個時候的結果可能是還沒有改變的值.
那麼我如何得到期望的值5呢?既然執行緒在真正執行前需要一段時間,那麼我可以在t.start()方法之後加上注釋一的**,讓主線程休眠一段時間,等待執行緒t的啟動.
那麼現在看一下注釋二,在t.start()之後加上t.join(),也能得到結果5.那麼join()方法到底起到了什麼作用呢?
簡單點來說:t.join()使執行緒t執行完畢.結合上例的解釋就是說,當執行緒t在某個執行緒上呼叫join()方法時,該執行緒被掛起,直到執行緒t執行完畢再繼續執行.
join()方法在使用時可以帶上乙個超時引數,這樣如果執行緒t在這段時間到期時還沒有結束的話,join()方法也能返回,使當前執行緒繼續執行.
java 多執行緒之join 方法
join 方法作用 阻塞執行緒,即等同於主線程進入子執行緒的wait 方法,等待子執行緒執行完,喚醒主線程才能繼續執行,子執行緒join到主線程。join 只阻塞主線程,若執行緒中有其他執行緒,仍然是並行狀態 如 main是主線程,在main中建立了thread執行緒,在main中呼叫了thread...
Java多執行緒join 方法詳解
今天在使用多執行緒join的時候踩了乙個坑,就是在某個執行緒內用自身呼叫join方法 這是錯誤的,仔細想想,讓自己先執行完自己的內容完然後再執行自己的內容,這不是 嗎?哈哈,所以這是錯誤的寫法 override public void run catch interruptedexception e...
Java多執行緒 join方法使用示例
join方法在jdk中的解釋為 等待當前執行緒呼叫結束 示例 package com.trs.thread join方法 允許當前執行緒在另乙個執行緒上等待,進入阻塞狀態,直到 另乙個執行緒執行完畢,當前執行緒才會解除阻塞,繼續執行。通常用於協調兩個執行緒同步工作使用 author xiayunan...