thread類中的join方法的主要作用就是同步,它可以使得執行緒之間的並行執行變為序列執行。
public class test1
}class testthreadjoin extends thread
public testthreadjoin(string name)
public void run()
}}
輸出結果是:先列印完李明,後列印李亮。
大概說明了join方法的作用:在a執行緒中呼叫了b執行緒的join()方法時,表示只有當b執行緒執行完畢時,a執行緒才能繼續執行。
這裡呼叫的join方法是沒有傳參的,join方法其實也可以傳遞乙個引數給它的。
public class test1
}class testthreadjoin extends thread
public testthreadjoin(string name)
public void run()
}}
輸出結果是:程式執行前面10毫秒內列印的都是李明執行緒,10毫秒後,李明和李亮程式交替列印。
join方法中如果傳入引數,則表示這樣的意思:如果a執行緒中掉用b執行緒的join(10),則表示a執行緒會等待b執行緒執行10毫秒,10毫秒過後,a、b執行緒並行執行。需要注意的是,jdk規定,join(0)的意思不是a執行緒等待b執行緒0秒,而是a執行緒等待b執行緒無限時間,直到b執行緒執行完畢,即join(0)等價於join()。
有了上面的例子,我們大概知道join方法的作用了,那麼,join方法實現的原理是什麼呢?
其實,join方法是通過呼叫執行緒的wait方法來達到同步的目的的。例如,a執行緒中呼叫了b執行緒的join方法,則相當於a執行緒呼叫了b執行緒的wait方法,在呼叫了b執行緒的wait方法後,a執行緒就會進入阻塞狀態,具體看下面的原始碼:
public final synchronized void join(long millis)
throws interruptedexception
if (millis == 0)
} else
wait(delay);
now = system.currenttimemillis() - base;}}
}
從原始碼中可以看到:join方法的原理就是呼叫相應執行緒的wait方法進行等待操作的,例如a執行緒中呼叫了b執行緒的join方法,則相當於在a執行緒中呼叫了b執行緒的wait方法,當b執行緒執行完(或者到達等待時間),b執行緒會自動呼叫自身的notifyall方法喚醒a執行緒,從而達到同步的目的。
講解完畢,謝謝!
Java執行緒的join 方法
join 把指定的執行緒加入到當前執行緒,可以將兩個交替執行的執行緒合併為順序執行的執行緒。比如在主線程中呼叫了執行緒a的join 方法 a.join 則直到執行緒a執行完畢後,才會繼續執行執行緒主線程。t.join 等待執行緒 t 執行完畢,再執行呼叫t執行緒方法的執行緒。大概就是這個意思 t.j...
java 執行緒協作 join方法
在實際開發中我們往往會遇到這樣的情況乙個執行緒的執行需要依賴另乙個執行緒執行後的結果。即主線程生成並起動了子執行緒,如果子執行緒裡要進行大量的耗時的運算,主線程往往將於子執行緒之前結束,但是如果主線程處理完其他的事務後,需要用到子執行緒的處理結果,也就是主線程需要等待子執行緒執行完成之後再結束,這個...
java 多執行緒之join 方法
join 方法作用 阻塞執行緒,即等同於主線程進入子執行緒的wait 方法,等待子執行緒執行完,喚醒主線程才能繼續執行,子執行緒join到主線程。join 只阻塞主線程,若執行緒中有其他執行緒,仍然是並行狀態 如 main是主線程,在main中建立了thread執行緒,在main中呼叫了thread...