zoukankan      html  css  js  c++  java
  • java Future类型


    package com.zf.jdk.test.future; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class WxMpMessageRouter { private Integer DEFAULT_POOL_SIZE=100; private ExecutorService executorService; public WxMpMessageRouter(){ this.executorService = Executors.newFixedThreadPool(DEFAULT_POOL_SIZE); } public void testFuture(){ List<FutureTask> list = FutureTask.getList(); List<Future> futures = new ArrayList<>(); for (int i = 0; i < list.size(); i++) { FutureTask futureTask = list.get(i); if (futureTask.getAsync()) { Future<?> submit = this.executorService.submit(new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(futureTask.getTaskName() + "正在异步执行"); } })); futures.add(submit); }else{ System.out.println(futureTask.getTaskName()+"正在同步执行"); } } if (futures.size() > 0) { this.executorService.submit(new Runnable() { @Override public void run() { for (Future future : futures) { try { Object o = future.get(); System.out.println(o); System.out.println("End session access: async=true,"); } catch (InterruptedException e) { System.out.println("Error happened when wait task finish"); e.printStackTrace(); } catch (ExecutionException e) { System.out.println("Error happened when wait task finish"); e.printStackTrace(); } } } }); } } /** * 异步任务 */ private static class FutureTask{ /** * 任务名 */ private String taskName; /** * 是否异步 */ private Boolean async; public FutureTask(String taskName, Boolean async) { this.taskName = taskName; this.async = async; } public String getTaskName() { return taskName; } public void setTaskName(String taskName) { this.taskName = taskName; } public Boolean getAsync() { return async; } public void setAsync(Boolean async) { this.async = async; } public static List<FutureTask> getList(){ List<FutureTask> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { FutureTask futureTask = new FutureTask(i + "", i < 2 ? true : false); list.add(futureTask); } return list; } } }

      总结:

    使用 ExecutorService.submit()方法 可以异步执行 任务并立马返回 Future对象

    在主线程中 使用 future.get() 会阻塞等待 异步任务执行完 

    异步任务执行完, future.state 从0 变成 2 

      

  • 相关阅读:
    个人管理:提高你的搜商
    敏捷个人:提供更多文档下载,并转载一篇敏捷个人读书笔记
    个人管理: 激励你的一句话
    敏捷个人 从Scrum实践来思考如何导入价值观
    信息系统开发平台OpenExpressApp 如何解决ComboBox.TextProperty绑定带来问题的来龙去脉
    敏捷个人 敏捷个人价值观,欢迎提出你的意见和你的价值观
    使用VS2010的CodedUI来做自己的自动化测试框架
    .Net4下的MEF(Managed Extensibility Framework) 架构简介
    IronRuby - 快速在半小时学习Ruby基础知识
    敏捷个人 项目网站文档页签增加blog链接
  • 原文地址:https://www.cnblogs.com/zfzf1/p/10980358.html
Copyright © 2011-2022 走看看