我想调用一个返回字符串值的方法。实际上,这个字符串值是一个实例变量,run()
方法放置了字符串的值。
所以,我想调用一个方法来获取线程run()
方法更新的字符串值。
我该怎么做......?
答案 0 :(得分:9)
查看Callable哪个是可以返回结果的Runnable。
你这样使用它:
您编写Callable而不是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了解详情。
答案 1 :(得分:6)
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();
}
}
答案 2 :(得分:1)
改为使用Callable<String>
,将其提交给ExecutorService
,然后在提交时get()
上回复Future<String>
。