我正在研究java中的線程。在線程中理解join()的概念的簡單例子
我只想一個簡單的例子,它解釋了在線程中使用join()
。我看到這個鏈接..
Understanding join() method example
但還是無法理解的概念。
任何人都可以解釋我在線程中使用join()
的概念。
任何解釋,這將對我非常有幫助。
謝謝。
我正在研究java中的線程。在線程中理解join()的概念的簡單例子
我只想一個簡單的例子,它解釋了在線程中使用join()
。我看到這個鏈接..
Understanding join() method example
但還是無法理解的概念。
任何人都可以解釋我在線程中使用join()
的概念。
任何解釋,這將對我非常有幫助。
謝謝。
Thread.join()
導致當前線程在它恢復執行之前等待您調用join()
的線程死掉。
我能想到的最簡單的解釋是,連接使得調用者線程等待指定線程的完成。
如果你有一個「主線程」和「線程A」,如果你從主線程調用A.join(),主線程將等待線程A完成。
關於併發的Java SE的手冊頁應該幫助你在這裏:http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html
但isAlive()也做同樣的事情嗎?那麼爲什麼提供join()呢? –
錯了。 isAlive()只返回true或false來表示線程是否存在。它不會導致調用線程等待。 – Aurand
的Thread.join()塊(不返回),直到你完成加入線程。
這不是等待某個線程完成的唯一方法,但它是CPU使用率最高的一種方式。試想一下,如果你有這樣的(僞)一個循環:
while(!thread.isAlive())
{
Sleep(1);
}
這理應做同樣的事情......但是,每秒1000次,它會醒來,檢查變量,回去睡覺。這意味着1000個上下文切換(這是昂貴的),並且程序結果會變慢。這被稱爲'spinlocking'或'busywaiting',並且在編程中被忽視,因爲它無緣無故地消耗CPU。
如果我有3個線程對象,像t1,t2,t3和t1.join(); t2.join(); t3.join()。所以這裏t1,t2,t3同時執行,t2不等待t1完成,爲什麼這樣呢? –
..因爲t2沒有在t1上調用join()。 –
@MartinJames你的意思是說t1和t2在主線程上調用join()。我對嗎?? –
我做了一些實驗,這裏是結果:1.首先啓動線程t3。 2.啓動t1然後3.創建t2和t2連接運行線程t1。 根據定義,t2應該等待t1死亡,然後它應該開始。
觀察:我呼籲等待t1,所以t1暫停但沒有死亡,但我看到然後t2開始爲什麼?
public class TestThreadJoin {
public static void main(String[] args) {
final Thread t3 = new Thread(new Runnable() {
public void run() {
System.out.println("R3");
}
});
t3.start();
final Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("R1 before");
try {
perform();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("R1 after");
}
private void perform() throws InterruptedException {
synchronized(this){
wait(5000);
}
}
});
t1.start();
Thread t2 = new Thread(new Runnable() {
public void run() {
System.out.println("R2");
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
}
}
http://docs.oracle.com/javase/tutorial/essential/concurrency/join.html –
我想知道從downvoters downvoting的振振有辭 –
http://www.avajava.com/tutorials/課程/ how-do-i-use-threads-join-method.html –