天天看點

跟着da敲多線程

package com.example.demo.Executor;

import java.util.ArrayList;
import java.util.concurrent.*;

public class ExecutorTest {

    public static void test1() throws Exception{
        ExecutorService executorService = Executors.newCachedThreadPool();
        ArrayList<Future<String>> futureArrayList = new ArrayList<>();
        System.out.println("公司讓你通知大家聚餐 你開車去接人");
        Future<String> future10 = executorService.submit(() -> {
            System.out.println("總裁:我在家上大号 我最近拉肚子比較慢 要蹲1個小時才能出來 你等會來接我吧");
            TimeUnit.SECONDS.sleep(10);
            System.out.println("總裁:1小時了 我上完大号了。你來接吧");
            return "總裁上完大号了";

        });
        futureArrayList.add(future10);
        Future<String> future3 = executorService.submit(() -> {
            System.out.println("研發:我在家上大号 我比較快 要蹲3分鐘就可以出來 你等會來接我吧");
            TimeUnit.SECONDS.sleep(3);
            System.out.println("研發:3分鐘 我上完大号了。你來接吧");
            return "研發上完大号了";
        });
        futureArrayList.add(future3);
        Future<String> future6 = executorService.submit(() -> {
            System.out.println("中層管理:我在家上大号  要蹲10分鐘就可以出來 你等會來接我吧");
            TimeUnit.SECONDS.sleep(6);
            System.out.println("中層管理:10分鐘 我上完大号了。你來接吧");
            return "中層管理上完大号了";
        });
        futureArrayList.add(future6);
        TimeUnit.SECONDS.sleep(1);
        System.out.println("都通知完了,等着接吧。");
        try {
            for (Future<String> future : futureArrayList) {
                String returnStr = future.get();
                System.out.println(returnStr + ",你去接他");
            }
            Thread.currentThread().join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static void test2() throws Exception {
        ExecutorService executorService = Executors.newCachedThreadPool();
        ExecutorCompletionService<String> completionService = new ExecutorCompletionService<>(executorService);
        System.out.println("公司讓你通知大家聚餐 你開車去接人");
        completionService.submit(() -> {
            System.out.println("總裁:我在家上大号 我最近拉肚子比較慢 要蹲1個小時才能出來 你等會來接我吧");
            TimeUnit.SECONDS.sleep(10);
            System.out.println("總裁:1小時了 我上完大号了。你來接吧");
            return "總裁上完大号了";
        });
        completionService.submit(() -> {
            System.out.println("研發:我在家上大号 我比較快 要蹲3分鐘就可以出來 你等會來接我吧");
            TimeUnit.SECONDS.sleep(3);
            System.out.println("研發:3分鐘 我上完大号了。你來接吧");
            return "研發上完大号了";
        });
        completionService.submit(() -> {
            System.out.println("中層管理:我在家上大号  要蹲10分鐘就可以出來 你等會來接我吧");
            TimeUnit.SECONDS.sleep(6);
            System.out.println("中層管理:10分鐘 我上完大号了。你來接吧");
            return "中層管理上完大号了";
        });
        TimeUnit.SECONDS.sleep(1);
        System.out.println("都通知完了,等着接吧。");
        //送出了3個異步任務)
        for (int i = 0; i < 3; i++) {
            String returnStr = completionService.take().get();
            System.out.println(returnStr + ",你去接他");
        }
        Thread.currentThread().join();
    }


    public static void main(String[] args) {
        try {
            test1();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("-----------------------------------------------------------");
//        try {
//            test2();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }








}