These APIs provide ways to continuous tracing in the cross thread scenario with minimal code changes. All following are sample codes only to demonstrate how to adopt cross thread cases easier.
@TraceCrossThread public static class MyCallable<String> implements Callable<String> { @Override public String call() throws Exception { return null; } } ... ExecutorService executorService = Executors.newFixedThreadPool(1); executorService.submit(new MyCallable());
ExecutorService executorService = Executors.newFixedThreadPool(1); executorService.submit(CallableWrapper.of(new Callable<String>() { @Override public String call() throws Exception { return null; } }));
or
ExecutorService executorService = Executors.newFixedThreadPool(1); executorService.execute(RunnableWrapper.of(new Runnable() { @Override public void run() { //your code } }));
@TraceCrossThread public class MySupplier<String> implements Supplier<String> { @Override public String get() { return null; } } ... CompletableFuture.supplyAsync(new MySupplier<String>());
or
CompletableFuture.supplyAsync(SupplierWrapper.of(()->{ return "SupplierWrapper"; })).thenAccept(System.out::println);
CompletableFuture.supplyAsync(SupplierWrapper.of(() -> { return "SupplierWrapper"; })).thenAcceptAsync(ConsumerWrapper.of(c -> { // your code visit(url) System.out.println("ConsumerWrapper"); }));
or
CompletableFuture.supplyAsync(SupplierWrapper.of(() -> { return "SupplierWrapper"; })).thenApplyAsync(FunctionWrapper.of(f -> { // your code visit(url) return "FunctionWrapper"; }));