public class TestCompletableFuture {
private static final Executor executor = Executors.newFixedThreadPool(4);
private static void submitSleep(int id) {
CompletableFuture<String> resultCF = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
try {
// sleep会释放执行权 但不会释放锁 wait会释放执行权和锁
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
return new StringBuffer("success").append(id).toString();
}
}, executor);
// result
resultCF.thenAccept(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(new StringBuffer(s).append(" :").append(System.currentTimeMillis()).toString());
}
});
}
private static void submit(int id) {
CompletableFuture<String> resultCF = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
return new StringBuffer("success").append(id).toString();
}
}, executor);
// result
resultCF.thenAccept(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(new StringBuffer(s).append(" :").append(System.currentTimeMillis()).toString());
}
});
}
public static void main(String args[]) {
System.out.println("start submit:" + System.currentTimeMillis());
for (int i=1; i<6; i++) {
submitSleep(i);
}
for (int i=6; i<11; i++) {
submit(i);
}
System.out.println(" end submit:" + System.currentTimeMillis());
}
}CompletableFuture
最新推荐文章于 2023-05-05 22:25:50 发布
本文通过一个具体的Java示例介绍了如何使用CompletableFuture来执行异步任务,并展示了带阻塞与不带阻塞的任务执行方式及其结果处理过程。
169万+

被折叠的 条评论
为什么被折叠?



