java8 之后使用CompletableFuture來(lái)異步執(zhí)行任務(wù)的場(chǎng)景越來(lái)越多,這個(gè)時(shí)候debug調(diào)試就是個(gè)問題了。
我們只能看到新線程之后的調(diào)用棧,一個(gè)方法各種異步都可以調(diào)用,如果不知道前面的調(diào)用棧,是非常難排查問題的。
public class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
wrap();
}
public static void wrap() {
CompletableFuture<Void> run = CompletableFuture.runAsync(() -> {
process();
});
}
public static void process() {
System.out.println("run"); // 這里設(shè)置斷點(diǎn)
}
}
debug截圖:
image.png
從截圖上我們是看不到完整的調(diào)用鏈的。
idea 2017之后提供了一個(gè)看異步調(diào)用棧的功能,非常的好用。
開啟異步調(diào)用棧:
image.png
開啟后的效果:
image.png
可以看到從main方法的入口了。