2011-10-04 132 views
-1

一般性討論我只是想知道什麼是調用線程的以下兩種方法之間的差異。約線程(混亂)

請看兩種情況

Thread Implementation Scenario 1

的兩張圖片

Thread Implementation Scenario 2

我的問題是,我所面臨的問題是,當我按照「方案1」我失去了我的程序的控制和在所述MyClass的

「//其他命令」 運行didnt

當我跟隨的場景我的兩個序列是平穩。有沒有人注意到這種行爲或者是故障?

請給你的意見。

問候,

+2

兩者都是不正確的,因爲他們甚至不進行編譯。線程是一個類,而不是一個接口。所以你不能實現它。 –

+0

這種情況下的線程接口是什麼?在標準的Java中,Thread是一個類,而不是一個接口。 –

+0

哦,抱歉,它的一個大錯字它沒有實現Thread,它是實現Runnable。希望你會忽略這個錯誤,並會繼續調用機制 –

回答

0

我想這不是實現Thread(這是不是一個接口如前所述),你的意思是實現Runnable

所以這個問題似乎是(這只是一個猜測,因爲你的問題缺失):誰應該開始線程 - MyClassMyThread

基本上,我寧願場景1,因爲MyThread實際上只是一個可運行的任務,不應該額外處理線程本身。

因此MyClass應該創建並啓動線程。這還可以讓你繼續引用產生的線程,並可能在稍後調用join()或其他方法。

一點題外話,我會改變MyThread到這一點:public class MyRunnable implements Runnable { ... }

+0

是的托馬斯,我的意思是實施Runbable其不是線程是一個錯字,很抱歉。 –

0

你可能想訪問Thread對象,例如等待它完成或輪詢它的狀態。在場景2中,您可能不會這樣做,因爲客戶端代碼無法訪問變量t。爲了達到這個目的,您必須從外部代碼可見t或覆蓋Thread方法(這將是有點徒勞的)。如果invokeThread意味着某種方便的方法,您可以考慮返回t

如果方案2的意思是「封裝運行一個線程並控制它的狀態」,則不需要擴展Thread(這看起來有點令人困惑)。

正如the other comment提到的,我會第二實施Runnable,而不是繼承Thread更清潔的代碼。

+0

Chabicht我已經改變了它的圖像這是一個錯誤的錯誤它沒有實現線程它實現Runnable對這個錯誤抱歉 –

+0

我已經包括我的觀察我注意到我的問題後編輯它。 –