【发布时间】:2017-02-16 19:17:31
【问题描述】:
编辑:我的问题不同,它与链接的问题无关。
我使用完成处理程序跟踪代码。
FutureTask<Void> futureTask = new FutureTask<Void>(() -> {
System.out.println("callback");
return null;
});
Runnable task = () -> {
for(int i=0; i<5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
futureTask.run();
};
new Thread(task).start();
new Thread(task).start();
基本上我正在寻找可变数量任务的完成处理程序,还是有其他方法?
我从这个answer 中得到启发,但在我寻找原生解决方案时,它似乎是某个库的一部分。
这是我在最后使用结果处理程序的可完成期货的尝试。
public void test() {
CompletableFuture
.supplyAsync(() -> method1())
.supplyAsync(() -> method2())
.supplyAsync(() -> result());
}
public String method1() {
System.out.println("calling 1");
return "method1";
}
public String method2() {
System.out.println("calling 2");
return "method2";
}
public String result() {
System.out.println("result");
return "result";
}
【问题讨论】:
-
为什么不能用旧方法替换
futureTask.run();? -
你基本上可以通过实现一个在其前身上调用
Thread.join()然后做任何你想做的事情来链接你的任务。 -
@Ravindrababu 不是重复的。
标签: java multithreading java-8 completable-future futuretask