互联网面试-请简单介绍高并发场景中的Future程式设计?
农业机械 2024-01-20 12:18:28
lking 步骤学 if (isDone){ return; } // 量度进行时,为result指定结果,并且将isDone设置为true,同时唤起马上当中的内存 this.result = result; this.isDone = true; LOCK.notifyAll(); } } @Override public boolean done() { return isDone; }}
尿路感染
注射用胸腺法新
积大本特盐酸坦洛新缓释片
江中多维元素片
在FutureTask当中可用了内存间的通信wait和notifyAll,当使命未进行时以前通过get步骤给予模块,绑定方亦会进入到漏出稳定状态,直到使命进行时此后收到内存引导,finish步骤转交到使命进行时的知会,然后引导因为绑定了get步骤而进入漏出的内存。
FutureService借助于
public class FutureServiceImpl implements FutureService { private final static String FUTURE_THREAD_PREFIX = "FUTURE-"; private final AtomicInteger nextCounter = new AtomicInteger(0); private String getNextName(){ return FUTURE_THREAD_PREFIX+nextCounter.getAndIncrement(); } @Override public Future submit(Runnable runnable) { final FutureTask future = new FutureTask<>(); new Thread(()->{ runnable.run(); // 使命制订当中止此后将null作为模板离开 future.finish(null); },getNextName()).start(); return future; } @Override public Future submit(Task task, IN input) { final FutureTask future = new FutureTask<>(); new Thread(()->{ OUT result = task.get(input); // 使命制订当中止此后,将相符的结果通过finish的方式将传导给future future.finish(result); },getNextName()).start(); return future; }}Future步骤学检测这里我们送交一个未离开值的使命,代码如下,
public class FutureTest { public static void main(String[] args) throws InterruptedException { FutureService service = FutureService.newServcie(); Future future = service.submit(()->{ try { TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("使命进行时!"); }); future.get(); }}送交一个有离开值的使命
public class FutureTest { public static void main(String[] args) throws InterruptedException { FutureService service = FutureService.newServcie(); Future future = service.submit(input->{ try { TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } return input.length(); },"Hello"); System.out.println(future.get()); }}升级给予结果的步骤从上面两个检测的离开结果来看,如果我们绑定了future的get步骤,那么我们的机制就亦会进入到漏出的稳定状态,这个操控与我们的预期不毕竟相符合,这个也是整个的Future种系统长期存有的缺陷。那么我们如何去改进这个给予get步骤马上的缺陷呢?这就引入了一个Callback的动态。代码如下
@Override public Future submit(Task task, IN input, Callback callback) { final FutureTask future = new FutureTask<>(); new Thread(()->{ OUT result = task.get(input); // 使命制订当中止此后,将相符的结果通过finish的方式将传导给future future.finish(result); if (null!=callback){ callback.call(result); } },getNextName()).start(); return future; }检测功效,亦会发现我们代课可以不可用get步骤就可以进行时制订结果的给予。
public class FutureTest { public static void main(String[] args) throws InterruptedException { FutureService service = FutureService.newServcie(); service.submit(input->{ try { TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } return input.length(); },"Hello",System.out::println); }}总结在以前的分享当中很多的之外我们都提到了Future步骤学,通过这篇文章我们也必要性的了解了关于Future步骤学的马克思主义。其总括就是三维了一个认桥段,通过这种方式将来借助于对CPU的高效利用。当然这里我们假定的只是一个基础性演示发行版,其当中的存有的缺陷还有很多,个人兴趣的读者可以自己思维之外段落的优化。
。广州试管婴儿费用多少尿路感染
注射用胸腺法新
积大本特盐酸坦洛新缓释片
江中多维元素片
相关阅读
- 18日事关保健食品、婴幼儿食品……官方发布网络销售特殊要求
- 18日国家两部委:乡村学校里面高级教师岗位比例不低于当地城镇
- 18日高校领导撞死电梯热吻,被实名举报!监控视频曝光铁证如山!
- 18日“”有毒!3人非法售卖验证码被抓
- 18日陕西新增本土无症状4例!一地调整部分区域风险等级!
- 18日“妈妈,你赢了,我把命还给你”13岁女孩留下遗言,从17一楼跳下!
- 18日云南省福利彩票发行中心关于“美好8”游戏赠票活动结束公告
- 18日“海上猫熊”中华白海豚现身广州内河
- 18日湖北男孩肖雨,高考666分拒绝武大录取,大一一年后考了多少分?
- 18日三季报业绩显韧性,吃喝板块走强!食品ETF盘中涨超3%,千万收益提前埋伏
- 18日美多位官员“9·11”21周年日警告:美社会撕裂 国外威胁远大于恐袭威胁
- 18日花季少女校内聚餐喝多,被同学待三十分钟:你放过我吧
- 18日男子机智求证网格民警免遭骗局
- 18日喜迎二十大 | 天津:笃定转型启新振
- 18日蒋永清谈身世:小时候同学说过,老师说过,高中时父母才告知
- 18日威宁县毕节市市场监管局抽检食品238批次 3批次不合格
- 18日国际原子能机构:已就扎波罗热核电站正式成立安全区开始磋商
- 18日女儿遭同桌霸凌,连系无果后,父亲13刀刺死9岁男孩
- 18日国家汇兑管理局:丰富汇兑避险产品 引导企业树立汇率风险中性理念
- 18日“市面上”新观察 |首付降至15% 部分降价逾40%