Java 如何在线程run()结束后立即调用方法?
我想调用一个返回字符串值的方法。实际上,这个字符串值是一个实例变量,Java 如何在线程run()结束后立即调用方法?,java,concurrency,Java,Concurrency,我想调用一个返回字符串值的方法。实际上,这个字符串值是一个实例变量,run()method将字符串的值放入 因此,我想调用一个方法来获取由threadrun()method更新的字符串值 我该怎么做…?使用一个可调用的,将其提交给一个执行器服务,然后在未来上调用get(),当您提交它时,它会返回结果。检查哪个是可运行的,可以返回结果 您可以这样使用它: 您可以编写可调用而不是可运行的,例如: public class MyCallable implements Callable<Integ
run()
method将字符串的值放入
因此,我想调用一个方法来获取由threadrun()
method更新的字符串值
我该怎么做…?使用一个可调用的
,将其提交给一个执行器服务
,然后在未来
上调用get()
,当您提交它时,它会返回结果。检查哪个是可运行的,可以返回结果
您可以这样使用它:
您可以编写可调用而不是可运行的,例如:
public class MyCallable implements Callable<Integer> {
public Integer call () {
// do something that takes really long...
return 1;
}
}
FutureTask提供了更多方法,如
cancel
、isDone
和isCancelled
来取消执行并请求状态。get方法本身正在阻塞并等待任务完成。查看javadoc了解详细信息。啊,是的,Tim接受了我的答案并给了你一个很好的例子,所以我就不谈了。为什么要创建一个新的FutureTask而不是直接提交可调用任务?我认为那是不必要的。
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();
}
}
Integer result = task.get ();
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();
}
}