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

Sar*_*nan 3 java concurrency

我想调用一个返回字符串值的方法.实际上这个字符串值是一个实例变量,而run方法则放入字符串的值.

所以,我想调用一个方法来获取线程run()方法更新的字符串值.

我是怎么做的?

Plz任何人帮助我..

Saravanan

Tim*_*the 9

查看Callable,它是一个可以返回结果的Runnable.

你这样使用它:

你编写一个Callable而不是Runnable,例如:

public class MyCallable implements Callable<Integer> {
  public Integer call () {
    // do something that takes really long...
    return 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过将其提交给ExecutionService来解决这个问题:

ExecutorService es = Executors.newSingleThreadExecutor ();
Future<Integer> task = es.submit(new MyCallable());
Run Code Online (Sandbox Code Playgroud)

您将获得FutureTask句柄,该句柄将在任务完成后保存结果:

Integer result = task.get ();
Run Code Online (Sandbox Code Playgroud)

FutureTask提供了更多的方法,比如cancel,isDoneisCancelled取消执行,并要求状态.get方法本身阻塞并等待任务完成.查看javadoc了解详情.


Ste*_*son 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();
    }
}
Run Code Online (Sandbox Code Playgroud)