2012-11-25 92 views
0

所以我一直在想, 最近,在學校裏,我們一直在學習Java線程..有沒有辦法在Java中而不是整個類中的線程方法?

不像大多數其它語言,我還沒有找到一種方法來線程Java中的功能還沒有,這真的是我正在尋找...

我知道一個可以使用運行類,但想象一個類有3個函數,每個都有自己的 參數,我希望能夠調用這些函數如果可能的話,將它們分隔開......

+0

您的類需要實現Thread,以便您可以調用run方法並同時執行兩個或更多任務。沒有獨立的方式來實現多線程。 –

+0

'線程類'或'線程函數'是什麼意思?在Java中,您創建線程並定義它們的功能。你不做這兩件事。 – bmargulies

+0

另外'跑'不是一個班。這是每當新創建的線程啓動時執行的方法。 –

回答

10
new Thread(new Runnable() { 
    public void run() 
    { 
     functionToThread(); 
    } 
}).start(); 
+0

+1,但是OP應該知道你仍然在線程化一個對象而不僅僅是一個函數,即使這個對象不是用戶定義的。 – asteri

+0

是的,這是絕對正確的。這是我能想到的最接近的例子,它給了「調用另一個線程的功能」的感覺 – Cruncher

+0

這正是我所期待的,非常感謝。 – jaggy

1

您必須創建單獨的包裝類,它們實現Runnable或擴展線程並調用喲你的功能。

順便說一句,即使Java有類似C的方法指針你仍然需要一些包裝知道你想傳遞給函數的參數的值。

+0

這實際上是用Java語言編寫的lambda表達式:) http://www.geekyarticles.com/2012/01/whats-cooking-in-java-8-project-lambda.html – jbx

4

在Java中實現多線程的正確方法是實施Runnable。擴展Thread類只是一個簡單方便的方法,但實現Runnable接口是最好的方法,因爲它提供了方法run(),您可以在其中調用函數,並且還允許擴展其他類而不是Thread

然而,您無權訪問的是您在另一個線程中執行的函數的返回值。爲此,您可以使用Future,只要另一個線程執行該函數,它就會爲您提供一個將返回值填充的對象。除了實施Runnable之外,您還實施Callable,這與而非run()方法非常相似,並允許您通過泛型指定返回類型。 Future對象也可以與線程池和任務執行程序一起使用。看看Future類的javadoc中的例子,它有一個很好的例子和解釋。

還記得一個方法中,你可以創建一個匿名類,因此,如果你簡單地後,你做它內嵌在方法中(擴大RunnableCallable)你想在一個單獨的線程來執行。 (正如Cruncher在他的回答中所指出的)

相關問題