(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 @   xiaoBai1001  阅读(231)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示