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

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 的线程等待队列中等待。
  收藏

微信这个功能要收费了?官方回应了最近不少人的微信群里流传着这样一条消息发早安等问候祝福图片要收费这是真的吗?该消息称从三月一日起问好(早安)等图片都要收费了,并且双向收费,请各位朋友问好要用文字不要用图片了。谢谢不买新电脑不能升级Win11?长期以来,Windows一直是PC重要的组成部分,以至于我们无法想象一个没有它之后会如何。虽然经历过起起落落,但目前的Windows10一直是一个相对稳定的版本。8月31日,微软官一波未平,一波又起,滴滴又被约谈2021年9月1上午,交通运输部等五部联合约谈滴滴出行美团出行曹操出行高德等11家网约车平台。这已经不是滴滴第一次被约谈了,自从滴滴被调查之后,几乎每个月都要被约谈数次,人们不禁感极狐汽车,为破界而生近日,中共中央政治局会议在研究当前经济形势部署下半年经济工作时,提出支持新能源汽车加快发展。这是继2020年发布新能源汽车智能汽车等相关产业规划后,国家就这一产业发出的最新信号,内特斯拉全新一代跑车2023年推出,零百2S,续航近千公里,又跳票?根据特斯拉首席执行官埃隆马斯克的最新消息,新的Roadster应该在2023年进入市场。报道称,马斯克曾在1月份暗示,原定于2020年推出的Roadster将在2022年夏末发布。如果全人类付一切代价,能在100年内造出能飞往几光年星系的宇宙飞船吗?首先很高兴看到你的问题。我们知道宇宙中最快的速度就是光速,平均速度约为每秒30万千米,非常的快,每秒绕地球七圈半,因此对于人类来讲光速是一个遥不可及的速度。而光年则是光1年所走的总新能源车市巨变,谁正成为弄潮儿?未来路在何方?去年9月,国内首个电动车友的专属节日919电动汽车生活节嘉年华在北京国家电网汽车充电站举办,嗨翻全场的电音派对精彩刺激的卡丁车竞速合家欢乐的互动竞赛,给我留下了深刻的印象。更令我大苹果的混合现实耳机,必须连接iPhone使用苹果MR眼镜智能眼镜有报道称,苹果正在开发的混合现实(MR)耳机必须与iPhone或其他苹果产品无线连接才能使用。IT媒体TheInformation2日(当地时间)援引消息人士的三星S22Ultra亮剑,屏下相机200倍变焦,4nm强芯坐镇要说现在可以做到从处理器到影像再到屏幕都自给自足的手机厂商非三星莫属,三星作为全球最大的手机厂商,拥有众多核心技术和专利,最难能可贵的是三星在创新和研发这条路上已经越走越宽了,确实妙啊,智能停车场设计原理真妙此文为您带来物联网智能停车场的工作原理,赶紧来一睹为快当车辆驶入出门禁天线通信区时,天线以微波通讯的方式与电子识别卡进行双向数据交换,从电子车卡上读取车辆的相关信息,在司机卡上读取三菱电机空调三级和格力空调一级哪个好?三菱电机空调和格力空调相比哪个好?坦率的说,从产品的声誉市场反响以及实际使用情况看,三菱电机空调确实要比格力空调好。但是要是从性价比上看,格力就有一定的优势。下面就具体看看这两种空
优博课学生端AxureRP原型编号0222优博课学生端AxureRP原型版权说明本站所有资料主要来源于网络的公开信息,都保留了原来的版权信息,本站所有的资料文档仅限用于学习交流,如若有侵权的嫌疑,请及时告知进行交互设计输出物标准注意需要该资源(文档图书)的朋友,请看文章底部的获取方式。编号8223交互设计输出物标准产品经理资料馆我们努力成为产品经理的朋友的工具箱资料馆,您的需要就是我们努力的方向。欢迎您给美爆了的德国LOZ微颗粒积木,从国风到游乐园,让人玩到停不下来假期在家,你是不是被孩子整天抱着手机或电脑平板气到炸?想让孩子放下电子产品和电子游戏?!那就不得不提积木这类能吸引孩子参与动手体验的拼插玩具了。既能转移孩子的注意力,又能锻炼孩子的夏日宝藏彩虹随手杯,高颜值超治愈,防烫防漏,元气百搭环保随行酷暑当头,奶茶的摄入量明显比其他季节多了一点,不过也千万不能忘了喝水,否则身体就会吃不消。喝水需要重视,但盛水的杯子也不容忽视!有的杯子,不仅仅是装水的容器,还能在实用之余调侃下生这款啤酒男士沐浴露,10万颗冰感气泡,击退油腻,不做臭男人什么样的男生讨女性喜欢?某网站调查显示,99。99的女性都喜欢清爽干净自带体香朝气蓬勃的男性。但很多男性因为工作忙或沉迷于游戏,完全不注意形象。天气逐渐转热,浑身上下开始油光焕发。当Zippo撞上国潮,硬汉必玩打火机点火姿势必须是最酷的每个烟民都向别人借过打火机,也被别人借过打火机。每个人的身边都有那么一个总是不带打火机,然后借别人打火机不还的人。还有一种健忘型,明明记得昨天亲手把打火机放在了桌上,可就是死也找不当心,你可能正在把冰箱变成垃圾桶文案来源丁香医生对于冰箱,我们总有着毫无保留的依赖感。在家做饭吃顿好的,做着做着就成了满汉全席,吃不完的剩菜,只能交给冰箱。对于宝妈来说,冰箱就更加难以割舍了,宝宝的食物要保证新鲜linux之sshpass命令将文件连接并传输到远程系统是系统管理员一直在做的事情。SSH是Linux平台上许多系统管理员使用的基本工具。SSH支持两种身份验证形式1。密码认证2。公钥认证公钥认证被认为是这两种Linux之sshid命令把本地的ssh公钥文件安装到远程主机对应的账户下,sshcopyid命令可以把本地主机的公钥复制到远程主机的authorizedkeys文件上,sshcopyid命令也会给远程主机linux之iconv命令转换文件的编码方式,iconv命令是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。一加联合摄影界奥斯卡再组大赛,发现不同城市五彩斑斓的红红色在中国文化里,代表的是喜庆与欢乐,是庄严与高贵。过年时候的鞭炮,古建筑的红墙,婚庆时候的囍字,都是每一个中国人熟悉的元素。红色还是一种状态,我们常说的红人网红正当红,都是人们期