所以我一直在想, 最近,在學校裏,我們一直在學習Java線程..有沒有辦法在Java中而不是整個類中的線程方法?
不像大多數其它語言,我還沒有找到一種方法來線程Java中的功能還沒有,這真的是我正在尋找...
我知道一個可以使用運行類,但想象一個類有3個函數,每個都有自己的 參數,我希望能夠調用這些函數如果可能的話,將它們分隔開......
所以我一直在想, 最近,在學校裏,我們一直在學習Java線程..有沒有辦法在Java中而不是整個類中的線程方法?
不像大多數其它語言,我還沒有找到一種方法來線程Java中的功能還沒有,這真的是我正在尋找...
我知道一個可以使用運行類,但想象一個類有3個函數,每個都有自己的 參數,我希望能夠調用這些函數如果可能的話,將它們分隔開......
您必須創建單獨的包裝類,它們實現Runnable
或擴展線程並調用喲你的功能。
順便說一句,即使Java有類似C的方法指針你仍然需要一些包裝知道你想傳遞給函數的參數的值。
這實際上是用Java語言編寫的lambda表達式:) http://www.geekyarticles.com/2012/01/whats-cooking-in-java-8-project-lambda.html – jbx
在Java中實現多線程的正確方法是實施Runnable
。擴展Thread
類只是一個簡單方便的方法,但實現Runnable
接口是最好的方法,因爲它提供了方法run()
,您可以在其中調用函數,並且還允許擴展其他類而不是Thread
。
然而,您無權訪問的是您在另一個線程中執行的函數的返回值。爲此,您可以使用Future
,只要另一個線程執行該函數,它就會爲您提供一個將返回值填充的對象。除了實施Runnable
之外,您還實施Callable
,這與而非run()
方法非常相似,並允許您通過泛型指定返回類型。 Future
對象也可以與線程池和任務執行程序一起使用。看看Future
類的javadoc中的例子,它有一個很好的例子和解釋。
還記得一個方法中,你可以創建一個匿名類,因此,如果你簡單地後,你做它內嵌在方法中(擴大Runnable
或Callable
)你想在一個單獨的線程來執行。 (正如Cruncher在他的回答中所指出的)
您的類需要實現Thread,以便您可以調用run方法並同時執行兩個或更多任務。沒有獨立的方式來實現多線程。 –
'線程類'或'線程函數'是什麼意思?在Java中,您創建線程並定義它們的功能。你不做這兩件事。 – bmargulies
另外'跑'不是一個班。這是每當新創建的線程啓動時執行的方法。 –