并发知识6

对并发散列映射的批操作

javase8 为散列映射提供批操作,即使有其他线程在处理映射,这些操作也能安全的执行。
批操作会遍历映射, 处理遍历过程中找到的元素

3种操作

  • 搜索为每个键或值提供一个函数, 直到函数生成一个非 null 的结果。然后搜 索终止, 返回这个函数的结果。
  • 归约 组合所有键或值, 这里要使用所提供的一个累加函数
  • forEach 为所有键或值提供一个函数。

找出第一个出现次数超过1000的单词

 String result = map.search(threshold, (k, v) -> v > 1000 ? k : null);

使用foreach遍历

map. forEach ( threshold ,
(k, v) -> v > 1000 ? k + "> " + v : null,  // Filter and transformer 
System.out::println); // The nulls are not passed to the consumer

使用reduce累加

Long sum = map.reduceValues(threshold, Long::sum);

统计多少个条目的值大于1000

Long count = map.reduceValues(threshold, v -> v > 1000 ? 1L : null ,
Long: : sum) ;

并行数组算法

Arrays.parallelPrefix(values, (x, y) -> x * y)

执行器

构建新的线程有一定的代价,涉及到与操作系统的交互。如果程序中创建大量的生命很短的线程,建议使用线程池

线程池

使用线程池应该做的事

  1. 调用 Executors 类中静态的方法 newCachedThreadPool 或 newFixedThreadPool

  2. 调用 submit 提交 Runnable 或 Callable 对象

  3. 如果想要取消一个任务, 或如果提交 Callable 对象, 那就要保存好返回的 Future 对象。

  4. 当不再提交任何任务时, 调用 shutdown。

可完成future

可以利用CompletableFuture实现当某一事件发生后执行某个操作,也可以利用它来有顺序的做某件事

同步器

同步器.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,023评论 8 265
  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 6,533评论 0 9
  • 我们还年轻,还在做着梦 你说 我们正年轻 不怕梦碎 然后 你做了一个有一个梦 因为你说我们正年轻 可是你从未想过 ...
    喔小酱阅读 1,400评论 0 0
  • 今天风雨交加,十分寒冷。回到家,老妈已经把粥煮好。刚坐到电脑旁传个文件的时间,老爸已经催促了两次吃晚饭了,...
    苗苗mm阅读 1,193评论 0 2

友情链接更多精彩内容