栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在实践中的Java并发中,Brian Goetz

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在实践中的Java并发中,Brian Goetz

这是一个计算阶乘的示例:

public static void main(String[] args) throws Exception {    //create a memoizer that performs factorials    final Memoizer<Integer, Integer> memo = new Memoizer<Integer, Integer> (new Computable<Integer, Integer>() {        @Override        public Integer compute(Integer a) { int result = 1 ; for(int i = 1 ; i < a ; i++){     result = result*i; } return result;        }    });    //now call the memoizer    System.out.println(memo.compute(10));    //call it with 10 threads concurrently    ExecutorService exec = Executors.newFixedThreadPool(10);    ExecutorCompletionService<Integer> compService = new ExecutorCompletionService<Integer>(exec);    for(int i = 0 ; i < 15 ; i++){        compService.submit(new Callable<Integer>(){ @Override public Integer call() throws Exception {     return memo.compute(5); }        });    }    exec.shutdown();    for(int i = 0 ; i < 15 ; i++){        System.out.println(compService.take().get());    }}

因此,如果两个线程尝试在完全相同的时间计算相同的阶乘,则由于

putIfAbsent
线程安全,因此只有其中一个将实际执行计算。第二个线程将简单地获取第一个线程在地图中放置的future,并等待其完成。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号