Thread 的join方法解釋

2022-06-09 15:24:09 字數 1475 閱讀 9752

一、作用

thread類中的join方法的主要作用就是同步,它可以使得執行緒之間的並行執行變為序列執行。具體看**:

public class jointest

}class threadjointest extends thread

@override

public void run()}}

上面程式結果是先列印完小明執行緒,在列印小東線程;  

上面注釋也大概說明了join方法的作用:在a執行緒中呼叫了b執行緒的join()方法時,表示只有當b執行緒執行完畢時,a執行緒才能繼續執行。注意,這裡呼叫的join方法是沒有傳參的,join方法其實也可以傳遞乙個引數給它的,具體看下面的簡單例子:

public class jointest

}class threadjointest extends thread

@override

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與start呼叫順序問題

上面的討論大概知道了join的作用了,那麼,入股 join在start前呼叫,會出現什麼後果呢?先看下面的測試結果

public class jointest

}class threadjointest extends thread

@override

public void run()}}

上面**執行結果是:小明和小東線程交替列印。

三、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執行緒,從而達到同步的目的。

Thread類的join方法使用

看文件的說明很難理解join是怎麼用的,其實很簡單 package com.test.thread public class join static class hostthread extends thread catch interruptedexception e system.out.pri...

java中Thread類的join方法

單核cpu執行多執行緒時底層實現原理是多個執行緒間切換,由於cpu的處理速度很快,看上去像多個執行緒同時執行。那麼我們如何實現讓執行緒t1,t2,t3,在t1執行完成後才執行t2,t2執行完成後才執行t3,也就是執行緒的序列化,通過thread類的join方法就可以實現。join方法 將該執行緒加入...

thread 中join 的用法

前段時間參加面試時,被乙個面試官問到thread中join方法用法,那會自己答得有點唐突吧,面試官對我的回答好像不是很滿意!1.首先來說說執行緒thread的join方法 join方法顧名思義 就是往執行緒中新增東西的 join方法可以用於臨時加入執行緒,乙個執行緒在運算過程中,如果滿足於條件,我們...