Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在线程run()结束后立即调用方法?_Java_Concurrency - Fatal编程技术网

Java 如何在线程run()结束后立即调用方法?

Java 如何在线程run()结束后立即调用方法?,java,concurrency,Java,Concurrency,我想调用一个返回字符串值的方法。实际上,这个字符串值是一个实例变量,run()method将字符串的值放入 因此,我想调用一个方法来获取由threadrun()method更新的字符串值 我该怎么做…?使用一个可调用的,将其提交给一个执行器服务,然后在未来上调用get(),当您提交它时,它会返回结果。检查哪个是可运行的,可以返回结果 您可以这样使用它: 您可以编写可调用而不是可运行的,例如: public class MyCallable implements Callable<Integ

我想调用一个返回字符串值的方法。实际上,这个字符串值是一个实例变量,
run()
method将字符串的值放入

因此,我想调用一个方法来获取由thread
run()
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();
    }
}