Как вызвать метод 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