我想使用 CompletableFuture
Java 8-9 启动线程,使用异步模式,这些是我的类和线程:
我有 3 个线程。我的类包含一个方法 myMethod()
Class_1 class_1 = new Class_1();
Class_2 class_2 = new Class_2();
Class_3 class_3 = new Class_3();
设置我的Runnable
如下:
Runnable runnableClass_1 = new Runnable(){
public void run(){
class_1.myMethod();
try { Thread.sleep(0); } catch (InterruptedException e) { e.printStackTrace(); }
}
};
Runnable runnableClass_2 = new Runnable(){
public void run(){
class_2.myMethod();
try { Thread.sleep(0); } catch (InterruptedException e) { e.printStackTrace(); }
}
};
Runnable runnableClass_3 = new Runnable(){
public void run(){
class_3.myMethod();
try { Thread.sleep(0); } catch (InterruptedException e) { e.printStackTrace(); }
}
};
创建线程:
Thread t_1 = new Thread( runnableClass_1 );
Thread t_2 = new Thread( runnableClass_2 );
Thread t_3 = new Thread( runnableClass_3 );
最后,我的问题是如何使用 CompletableFuture
异步模式启动这三个线程。
最佳答案
以下是实现相同方法的方法:
List<String> results = new ArrayList<String>();
CompletableFuture<Void> run1 = CompletableFuture.runAsync(() -> {
pauseSeconds(2);
results.add("first task");
}, service);
CompletableFuture<Void> run2 = CompletableFuture.runAsync(() -> {
pauseSeconds(3);
results.add("second task");
}, service);
CompletableFuture<Void> finisher = run1.runAfterBothAsync(run2,
() -> results.add(results.get(0)+ "&"+results.get(1)),service);
pauseSeconds(4);
System.out.println("finisher.isDone() = "+finisher.isDone());
System.out.println("results.get(2) = "+results.get(2));
// assert(finisher.isDone(), is(true));
// assertThat(results.get(2),is("first task&second task"));
}
public static void pauseSeconds(int num){
try {
Thread.sleep(num);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
关于Java 的 CompletableFuture 和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907862/