我想調用返回字符串值的方法。實際上這個字符串值是一個實例變量,而run方法則是把這個字符串的值。如何在線程運行()結束後立即調用方法?
所以,我想調用一個方法來獲取由線程的run()方法更新的字符串值..
我該怎麼辦嗎......?
PLZ任何人幫助我..
Saravanan
我想調用返回字符串值的方法。實際上這個字符串值是一個實例變量,而run方法則是把這個字符串的值。如何在線程運行()結束後立即調用方法?
所以,我想調用一個方法來獲取由線程的run()方法更新的字符串值..
我該怎麼辦嗎......?
PLZ任何人幫助我..
Saravanan
Class Whatever implements Runnable {
private volatile String string;
@Override
public void run() {
string = "whatever";
}
public String getString() {
return string;
}
public void main(String[] args) throws InterruptedException {
Whatever whatever = new Whatever();
Thread thread = new Thread(whatever);
thread.start();
thread.join();
String string = whatever.getString();
}
}
使用Callable<String>
相反,它提交到ExecutorService
,然後調用當您提交它,它返回Future<String>
get()
。
檢出Callable這是一個可以返回結果的Runnable。
你使用這樣的:
你寫一個可贖回的,而不是一個Runnable,例如:
public class MyCallable implements Callable<Integer> {
public Integer call() {
// do something that takes really long...
return 1;
}
}
你踢它的將任務提交到ExecutionService:
ExecutorService es = Executors.newSingleThreadExecutor();
Future<Integer> task = es.submit(new MyCallable());
您可以找回FutureTask手柄,該手柄將在任務完成後保留結果:
Integer result = task.get();
FutureTask提供更多方法,如cancel
,isDone
和isCancelled
取消執行並詢問狀態。 get方法本身被阻塞並等待任務完成。詳情請查看javadoc。
爲什麼要創建一個新的FutureTask而不是直接提交Callable?我認爲這是沒有必要的。 – 2010-09-30 15:18:15
@Mark:你說得對,我只是改變了。 – 2010-09-30 15:21:28
對不起,我不能讓ü – Saravanan 2010-09-30 15:09:36
啊是啊,添了我的答案,並給你一個很好的例子,所以我會留在這。 – 2010-09-30 15:16:57