Как вызвать метод Java асинхронно?

Есть ли хороший пример, чтобы начать с Java синхронного вызова метода. У меня есть два метода a и b, и я должен вызывать b асинхронно. Любое предложение?

2 ответа

Это большая тема, с большим количеством ошибок. Но вы можете получить хорошее начало, обернув свой метод в Callable<T> и представить это ExecutorService.submit, Это вернет обратно Future<T>, который имеет метод get(), Этот последний метод возвращает T, но не до Callable<T> законченный.

Например, скажем foo.b() возвращается String, Вы бы сделали что-то вроде:

Callable<String> asyncB = new Callable<String>() {
    @Override
    public String call() {
        foo.b();
    }
};
Future<String> futureB = myExecutorService.submit(asyncB);
// asyncB will now execute on a separate thread,
// which is managed by the ExecutorService
foo.a(); // synchronous call
String resultB = futureB.get();

Если вы на Java 8, то первый бит может быть просто:

Callable<String> asyncB = () -> foo.b();

Если вы случайно используете Spring, они имеют отличную асинхронную поддержку.

http://docs.spring.io/spring/docs/3.0.x/reference/scheduling.html

Другие вопросы по тегам