[英]Start a Runnable within a Runnable?
好吧,我的問題可能聽起來令人困惑,但實際上非常簡單。 我有一個Runnable啟動另一個Runnable實例。 所以基本上:
runnable1 - > runnable2
只要runnable2處於活動狀態,runnable1是否保持活動狀態,或者runnable2啟動時runnable1是否完成?
Runnable runnable1;
Runnable runnable2;
runnable1 = new Runnable()
{
public void run()
{
runnable2 = new Runnable()
{
public void run()
{
//Code here
}
};
(new Thread(runnable2)).start();//Now that runnable 2 is started, does runnable 1 temrinate??
}
};
(new Thread(runnable1)).start();//This starts first
Thread
獨立於啟動它的代碼。 因此,在您的代碼中,即使runnable2
仍在運行,執行runnable1
的Thread
也會在達到run()
結束時停止。
如果那不是你想要的,那么你應該在另一個線程上使用Thread.join()
。
簡短的回答是否定的。
答案很長。 線程獨立執行。 就像你有一個main
方法,並在其中啟動一個thread
, main
方法將只調用start並continue
線程將獨立運行。
如果你想讓runnable1等到runnable2完成。 你可以使用join()
更清楚
“只要runnable2處於活動狀態,runnable1是否保持活動狀態,或者runnable2啟動時runnable1是否完成?”
,要么是不正確的,這取決於哪個線程首先獲得CPU時間。
不是答案(其他人已經這樣做了)但是......
...你說“Runanble”但你的問題確實是關於線程的。 Runnable
是一個界面。 如果對象實現Runnable,則僅表示該對象具有public void run()
方法。 這並不意味着什么 。 如果它是你編寫的類,那么run()方法將執行你所寫的操作,僅此而已。
如果你將Runnable對象賦予一個新的Thread,然后你調用線程的start()
函數,這就是事情變得有趣的地方。 但在我開始之前,了解線程(小t)和Thread
(大T)對象之間的區別非常重要。 一個小t線程是通過程序代碼執行的獨立路徑。 big-T Thread是一個Java庫對象,可用於創建和管理一個小線程。
在調用t.start()之前,little-t線程不存在。 一旦它啟動,它將進行一些初始化,然后它將調用你的run()方法,然后如果你的run()方法返回,它將在它不再存在之前進行一些清理。
正如其他答案已經提到的那樣,Java語言無法識別線程之間的任何類型的父/子關系。 當一些Thread對象t存在時,碰巧知道它的任何其他線程可以通過調用t.join()來等待其線程死掉...
...或不。 這完全取決於你。 如果您的代碼是為了尊重父/子關系而編寫的,那么您可以這樣做。 這實際上是一種非常常見的做法,但語言並沒有強迫你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.