как вызвать метод сразу после завершения потока run ()? - PullRequest
3 голосов
/ 30 сентября 2010

Я хочу вызвать метод, который возвращает строковое значение. На самом деле это строковое значение является переменной экземпляра, а метод run() помещает значение строки.

Итак, я хочу вызвать метод, чтобы получить строковое значение, обновленное по потоку run() метод ..

Как мне это сделать ...?

Ответы [ 3 ]

9 голосов
/ 30 сентября 2010

Check 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 для деталей.

6 голосов
/ 30 сентября 2010
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();
    }
}
1 голос
/ 30 сентября 2010

Вместо этого используйте Callable<String>, отправьте его на ExecutorService, а затем вызовите get() на Future<String>, которое возвращается при отправке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...