Java 的 CompletableFuture 和线程

标签 java multithreading asynchronous java-8 completable-future

我想使用 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/

相关文章:

javascript - firefox 跟踪保护阻止 facebook js sdk 的异步加载

java - DAO方法错误: Parameter index out of range

java - 放心 JsonPath : Issue with getting list from json

java - 在Linux中使用BufferedWriter.flush()发送回车

java - Java 中对象实例的上限

java - 多线程、可调用、FutureObject

嵌套回调的Java模式?

Java:在不知道输入行数的情况下读取输入

multithreading - 使用performSelectorInBackground在单独的线程中处理代码时更新cocoa接口(interface)

python - 在后台运行类函数并检索其状态