2013-07-30 52 views
1

我有一個實現Runnable接口的類。實現無線程Runnable的Java類

現在我想根據布爾值在我的程序中啓動該類,可以是多線程的,也可以是非多線程的(順序的)。

我該怎麼做呢?這是我當前的代碼:

Constructor<?> constructor = processorClass.getConstructor(constructorParameterTypes); 
Processor<T> process = (Processor<T>)constructor.newInstance(constructorParameters); 
RunnableProcessor<T> runnableProcessor = new RunnableProcessor<>(process, object); 
if (multiThreaded) { 
    new Thread(runnableProcessor).start(); 
} 
else { 
    //what to do here? 
} 

所以澄清:我想從runnableProcessor調用run()方法,而無需創建一個線程。但我認爲直接調用run()已被棄用,因此在那裏尋找更好的解決方案。

問候。

+0

你是什麼意思的多線程?你col開始新的線程,但在第一個選項async ascond同步。 –

+0

我建議不要對新項目使用原始線程。我建議使用ExecutorService API。它將負責爲你管理線程的生命週期+它有許多實現可以爲你提供緩存和共享線程。在你的代碼中,你會使用'executor.execute(someRunnable);'這樣的東西 – Multithreader

回答

5

要獲取runnableProcessor.run();,這是不棄用(以及如Runnable只有一個方法,run,它不能在沒有整個類變得太棄用棄用)。

1

根據該文件,run()不會被棄用,這只是一個常見的錯誤,人們作出時,他們開始一個新的Thread,因爲那裏Runnable類型都參與其中,人們通常要開始一個新的Thread

正如您從documentation所看到的那樣,那裏沒有棄用的標籤!

1

這是最簡單的方法:

  1. 如果你想運行在一個單獨的線程類,調用start方法
  2. 如果你不想運行在一個單獨的線程類然後調用run方法。調用run可以使執行在同一個線程中順序進行。
5

調用run不推薦使用,應針對需要順序處理的特定實例調用。

或者,您可以將所有邏輯放在單獨的方法中,然後調用該方法而不是調用runrun也會調用這個方法裏面:

run(){ 
doOp(); 
} 

public doOp(){ 
//all your code here 
} 

主叫可以撥打doOp代替run但有效沒什麼區別!

1

您可以撥打RunnableProcessorrun()方法。如前所述,它根本不被棄用。

或者您可以調用一個新的Thread,就像您在多線程情況下一樣,啓動它並調用thread.join(),以便主線程將等待新啓動的線程完成。

1

提斯可以用兩種方法來完成,

1.call運行RunnableProcess的()直接。

2.移動邏輯以分離單獨的方法並在非多線程場景中調用該方法。該方法也必須在run()內部調用。

run(){ 
    do(); 
} 

do(){ 
    //your code here 
} 



if(multithreaded) 
    new Thread(runnableProcess).start(); 
else 
    runnableProcess.do(); 
相關問題