范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java的Future接口

  Java的Future接口
  Java 中的 Future 接口和其实现类 FutureTask,代表了异步计算的结果。 1. Future接口简介
  Future 是  异步计算结果  的容器接口,它提供了下面这些功能: 在等待异步计算完成时检查计算结果是否完成 在异步计算完成后获取计算结果 在异步计算完成前取消
  Future 可以用于耗时的异步计算任务。例如我们把 Runnable 接口或 Callable 接口的实现类提交到线程池时,线程池会返回一个 FutureTask 对象。  Future submit(Callable task)  Future submit(Runnable task, T result)
  下文会再解释 FutureTask,这是 Future 接口的一个实现类。Future 接口提供了下面这些方法
  Modifier and Type
  Method
  Description
  boolean
  cancel(boolean mayInterruptIfRunning)
  尝试取消执行此任务。
  V
  get()
  等待计算完成,然后检索其结果。
  V
  get(long timeout, TimeUnit unit)
  如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。
  boolean
  isCancelled()
  如果此任务在正常完成之前被取消,则返回 true  。
  boolean
  isDone()
  返回 true  如果任务已完成。2. FutureTask的使用
  可以将 FutureTask 交给 Executor 执行,也可以通过 ExecutorService.submit(...)  方法返回一个 FutureTask,然后执行 get 方法或 cancel 方法。
  也可以单独使用 FutureTask,比如下面的代码就实现了一种需求:一个线程必须等待另一个线程把某个任务执行完后它才能继续执行。假设有多个线程执行若干个任务,每个任务最多只能同时被执行一次,多个线程试图执行同一个任务时,只允许一个线程执行任务,其他线程等待这个任务执行完后才能继续执行。public class ConcurrentTask {      private final ConcurrentMap> taskCache = new ConcurrentHashMap>();      private String executionTask(final String taskName) throws ExecutionException, InterruptedException {         while (true) {             Future future = taskCache.get(taskName); //1.1,2.1             if (future == null) {                 // 创建 Task                 Callable task = new Callable() {                     public String call() throws InterruptedException {                         //......                         return taskName;                     }                 };                 //1.2 创建 FutureTask                 FutureTask futureTask = new FutureTask<>(task);                 future = taskCache.putIfAbsent(taskName, futureTask); //1.3                 // 如果是第一次放入,则尝试执行                 if (future == null) {                     future = futureTask;                     futureTask.run(); //1.4执行任务                 }             }              try {                 return future.get(); //1.5,2.2线程在此等待任务执行完成             } catch (CancellationException e) {                 taskCache.remove(taskName, future);             }         }     } }
  相信不难理解,下面是执行的示意图。
  3. FutureTask的实现
  FutureTask 的实现基于队列同步器 QAS。
  基于 复合优先于继承 的原则,FutureTask 声明了一个内部私有的,继承于 AQS 的子类 Sync,这对 FutureTask 所有公有方法的调用都会委托给这个内部子类。
  FutureTask 的 get  方法会调用 AQS.acquireSharedInterruptibly(int arg)  方法,执行过程如下:调用 AQS.acquireSharedInterruptibly(int arg)  方法,首先回调子类 Sync 中的方法 tryAcqurieShared  判断 acquire  操作是否可以成功。 acquire  操作成功的条件为:state 为执行完成状态 RAN 或已取消状态 CANCELLED 且 runner 不为 null。如果成功则 get  方法立即返回,失败则到线程等待队列中去等待其他线程执行 release  。当其他线程执行 release  ,如 FutureTask.run()  和 FutureTask.cancel()  ,唤醒当前线程后。当前线程再次执行 tryAcquireShared  将返回值 1,当前线程离开等待队列并唤醒后续线程。最后返回结果或抛出异常。
  FutureTask 的 run  方法执行过程如下:执行构造函数中指定的任务。原子方式更新同步状态,调用 AQS.compareAndSetState 如果上面的原子操作成功,设置代表计算结果的变量 result 的值为 Callable.call()  的返回指,然后调用 AQS.releaseShared(int arg) AQS.releaseShared(int arg)  首先回调 Sync 中的 tryReleaseShared(arg)  来执行 release  。这个方法唤醒等待队列中第一个线程。调用 FutureTask.done()  。
  当调用 FutureTask.get()  方法时,如果 FutureTask 不是处于执行完成状态 RAN 或已取消状态 CANCELLED。当前执行线程将到 AQS 的线程等待队列中等待。
  收藏

小米MIX4正式发布,前置摄像头没了,后置摄像头大了5年前,MIX横空出世,全面屏概念深入人心。5年间,MIX系列起起伏伏,愈发普通与常规。5年后,MIX4发布。一是带来真全面屏,二是想撕下全面屏的标签。如同字面意思,MIX4最大的刚刚!苏炳添宣布代言小米雷军他说他喜欢小米苏炳添携手小米苏炳添,小米一个是首位站上100米决赛赛场的亚洲人鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌鼓掌一个是近年来同样发展迅猛的国货之光加油加油加油加油加油加油加油加油加油加油加油小米MIX4正式发布,采用CUP全面屏屏下摄像头来了!今晚7点30分,雷军年度演讲正式拉开帷幕。此次演讲中,雷军会向大家讲述自己的创业历程最艰难的10个选择十年来最沮丧的一天等话题。雷军在2021年度演讲暨小米秋季新品发布会上表阿里女员工侵害案终有交代,涉事男被开除,恐遭封杀再求职艰难8月7日,阿里巴巴一女员工网络发文称,7月27日,自己被上级领导强制前往济南出差,遭男领导曲一(王某)及客户张某在饭桌上灌酒并遭到侵害。被张某摸胸摸腿摸私处,且被其带到无人包间进行女员工被侵害马云离开后,阿里越来越脏了?如果被侵害的人,是你妹妹你有一个妹妹,从小和你一起长大。你们关系很好,你也很照顾她。小的时候,她被隔壁家的臭弟弟欺负,你知道后把那个小子揍了一顿。长大后,妹妹进了一家互联网大厂,想3000元价位,好用又好看的三款旗舰机,你会选择谁?手机市场如今竞争十分激烈,各大厂商都采取了机海战术,基本上各个价位都有产品推出,综合价格和配置,在3000元价位的机型可能是竞争力最高的,不仅配置看齐顶级机皇,外观设计也没有千元机2000的华为mate30Pro香不香,新机价格很坚挺今天给大家开一个朴实无华的箱,他就是我花了2600块高价购入,发布于2019年的华为mate30Pro4G版。华为P50一发布,mate30和mate40价格也悄咪咪地涨了一波,说华为申请的P100商标被驳回,曾一口气把商标从P10注册到P1008月10日消息,AI财经社通过中国商标网获悉,华为技术有限公司(以下简称华为)此前申请的P100商标被驳回。中国商标网信息显示,2021年07月28日,华为又重新申请了2个P100德国学者让中国自己研发芯片不可取,连光刻机也离不开中国技术一直以来,科技是人类世界发展壮大的重要因素之一,科技的研发成为了我们当今所有人都不断攻克的难题,无论是哪一个国家,掌管了顶尖科技,那么这个国家将会变得异常强大,就像是中国,在不断发7纳米技术还未量产,5纳米技术已展开研发,中芯梁孟松透露实底大家都知道中芯国际是我国内地最有实力的一大芯片生产制造企业,因为相关条件限制,7纳米虽有突破,但一直未实现量产,如今它又开始对5纳米技术展开研究,这样真的可行吗?梁孟松已透露实底。老牌大厂HTC与NOKIA相约一起找上紫光展锐最近有消息称,两家淡出公众视野的老牌大厂HTC和NOKIA不约而同地找上了紫光展锐作为合作伙伴,两家即将推出的新产品都将搭载后者的芯片。HTC,简称宏达电,全称宏达国际电子股份有限
从3699跳水至2299,红米旗舰12256GB顶配,终于等到真香红米K系列是Redmi品牌独立之后诞生的旗舰手机系列,从K20开始到K40已经历经三代。前两代都是以Pro版本为主力,包括神机K20Pro,和遗憾的K30Pro,但今年主力变成了KApacheLog4j2远程代码执行漏洞一情况分析近日,监测发现互联网中出现ApacheLog4j2远程代码执行漏洞。攻击者可利用该漏洞构造特殊的数据请求包,最终触发远程代码执行。由于该漏洞影响范围极广,建议广大用户及时5G工业互联网万亿空间安全防护仍在起步阶段本报记者李玉洋李正豪乌镇报道2019年6月,工信部正式向中国电信中国移动中国联通中国广电发放5G商用牌照,中国正式进入5G商用元年。那时就有一种观点认为,5G的最大价值不在消费者领华为叛徒李一男杀入新能源造车领域,能否改变行业格局?风口来了,猪都能上天!在当下的市场环境下,市场公认最大的风口莫过于新能源造车了。可以毫不夸张地说,在这个赛道上,任何企业只要能够抓住这个风口并从中脱颖而出,未来一定逆天改命,铸就一新能源汽车持续爆发,锂电池汽车零部件等概念走高文福布斯中国图片来源视觉中国12月10日,锂电池汽车零部件稀土永磁等概念股开始发力。截至发稿,锂电池板块中铝国际(601068。SH)东华科技(002140。SZ)等涨停,盛新锂能明确了!云南将发力人工智能工业大麻和卫星应用领域如何提升产业技术创新能力,构建现代产业体系,实现制造业高质量发展?云南省工业和信息化厅编制的云南省十四五工业和信息化技术进步规划(以下简称规划)给出答案。规划明确,十四五期间,结合对区块链的新思考刚接触到区块链时,是非常惊喜。因为,它好像为我一直在关注的自组织团队架构提供了技术支持。但随着比较深入的了解后,发现了其几个难以绕过的固有缺点,没法进入实用(到现在除了比特币,以太央视曝光偷拍黑产!教你如何用微信检测隐藏摄像头,无需下载软件在这个互联网技术发展迅速的时代,给我们带来便利的同时,也产生了许多令人无法忽视的问题,譬如大家最关心的隐私安全。前几日,央视新闻频道就在报道中揭露了国内日益猖獗的偷拍黑产,小雷看了决策参考字节跳动据称正准备在国内推出首个独立电子商务App1谷歌发布2021年全球热搜榜疫情后人们希望世界变得更好事件12月9日,据报道,谷歌公布了2021年全球热搜榜,榜单结果显示,在经历了新冠肺炎疫情之后,人们希望自己和世界变得更好。华为AREngine安装量已达到11亿次,接入应用超2000款IT之家12月10日消息,今日举行的FBEC2021上,华为VRAR产品线总裁李腾跃表示,华为AREngine安装量已达到11亿次,已覆盖机型106款,已接入应用超2000款。AR阿里震动,雪梨被封,张大奕还好吗?最近,阿里巴巴做出了一个很大的调整,只是,大部分人没啥感觉。某猫某宝事业部的负责人蒋某,调整到了跨境电商事业部。这给出的信号是,国内零售市场,基本上见顶了,接下来阿里要主攻跨境电商