(FutureTask和Future) -使用方式 开启线程异步执行并可以阻塞得到返回值

一、 FutureTask 使用
/**
* FutureTask -使用方式 * 开启一个线异步线程,并让主线程等待返回结果 */ public class FutureTaskSevice { public static void main(String[] args) { FutureTask<String> futureTask=new FutureTask<>(new Callable<String>() { @Override public String call() throws Exception { // todo int count=0; for(int i=0;i<10;i++){ count=count+i; } return "it is subThread complete-count:"+count; } }); // 通过线程执行 Thread thread=new Thread(futureTask); thread.start(); try { String resultStr = futureTask.get(); System.out.println("resultStr = " + resultStr); }catch (Exception e) { e.printStackTrace(); } System.out.println("I am is main Thread"); } }

二、Future 使用

  //第二程使用线程池方法
        // ThreadPoolExecutor threadPool=new ThreadPoolExecutor(5,10,30,TimeUnit.SECONDS,new ArrayBlockingQueue<>(20));// 也可以自定义线程池
        ExecutorService executorService=Executors.newFixedThreadPool(5);
        Future<String> futureStr= executorService.submit(()->{
            return "it is result";
        });
        try {
            System.out.println("futureStr.get() = " + futureStr.get());// 此处会阻塞等待
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("I am is main Thread-2");

 

 

 

重点:(FutureTask和Future)-使用方式 开启线程异步执行并可以阻塞得到返回值,如当一个任务比较耗时,主线程执行一个任务,开启一个线程执行一个任务,最后需要两个线程的结果,就需要主线程执行完后等待子线程的执行结果;实例如一次分页数据请求,主线程可以获取列表数据,子线程可以开启执行统计总行数,最后汇总两个结果一起返回到页面。

posted @ 2022-02-12 18:11  xiaoBai1001  阅读(220)  评论(0编辑  收藏  举报