在Java中,有没有办法在线程内调用和处理异步方法?
考虑一种情况,其中线程主体内部的一个方法需要更多时间来执行它。因此,线程完成需要更多时间。
我通过使用FutureTask和Executors等并发包类尝试了一些例子。
是否可以在异步方法中实现和处理所有异常?是否有可能在JavaScript中获得成功或错误响应,如AJAX成功和错误处理程序?
我们如何确保异步方法是否成功执行(有或没有父线程上下文)?
答案 0 :(得分:0)
异步方法和父线程之间最自然的通信方式是标准类CompletableFuture
:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class AsyncExample {
String input; // common data
// async method
public String toLower() {
return input.toLowerCase();
}
// method on main thread
public void run() {
input = "INPUT"; // set common data
try {
// start async method
CompletableFuture<String> future = CompletableFuture.supplyAsync(this::toLower);
// here we can work in parallel
String result = future.get(); // get the async result
System.out.println("input="+input+"; result="+result);
} catch (InterruptedException | ExecutionException e) {
}
}
public static void main(String[] args) {
new AsyncExample().run();
}
}
请注意,创建和加热Executor
(包括示例中使用的默认执行程序)需要一些时间(我的计算机上有50毫秒),因此您可能需要事先创建并加热一个,例如:通过提供一个空方法:
CompletableFuture.supplyAsync(()->null).get();