重温java知识(三十九、JUC并发编程之五:线程锁之CompletableFuture)

CompletableFuture可以简化异步编程的复杂性,又可以结合函数式编程模式利用回调的方式进行意不处理计算操作。

1、使用CompletableFuture模拟炮兵听从命令打炮场景的例子:

package com.mydemo;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class JUCDemo {

    public static void main(String[] args) {

        // 线程回调
        CompletableFuture<String> completableFuture = new CompletableFuture<>();

        for(int i = 0; i < 5; i++){
            new Thread(()->{
                System.out.println("【START】" + Thread.currentThread().getName() + ",炮兵就绪,等待开炮命令");

                try {
                    // 获取命令信息
                    System.out.println("【END】" + Thread.currentThread().getName() + "、解除阻塞,收到命令数据" + completableFuture.get());
                }catch (Exception e){}

            }, "炮兵-").start();
        }

        new Thread(()->{
            try {
                // 等待命令
                TimeUnit.SECONDS.sleep(2);
                // 命令发出
                completableFuture.complete("开炮");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "开炮动作线程-").start();
    }
}

运行结果:
【START】炮兵-,炮兵就绪,等待开炮命令
【START】炮兵-,炮兵就绪,等待开炮命令
【START】炮兵-,炮兵就绪,等待开炮命令
【START】炮兵-,炮兵就绪,等待开炮命令
【START】炮兵-,炮兵就绪,等待开炮命令
【END】炮兵-、解除阻塞,收到命令数据开炮
【END】炮兵-、解除阻塞,收到命令数据开炮
【END】炮兵-、解除阻塞,收到命令数据开炮
【END】炮兵-、解除阻塞,收到命令数据开炮
【END】炮兵-、解除阻塞,收到命令数据开炮

你可能感兴趣的:(Java,java)