簡體   English   中英

在Runnable中啟動Runnable?

[英]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仍在運行,執行runnable1Thread也會在達到run()結束時停止。

如果那不是你想要的,那么你應該在另一個線程上使用Thread.join()

簡短的回答是否定的。

答案很長。 線程獨立執行。 就像你有一個main方法,並在其中啟動一個threadmain方法將只調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM