【JUC】ConcurrentHashMap之computeIfAbsent

news/2024/11/28 15:23:50/文章来源:https://www.cnblogs.com/chendsome/p/18574373

ConcurrentHashMap之computeIfAbsent

ConcurrentHashMap的锁粒度更细

public class TGestWordCount {public static void main(String[] args) {demo(() -> new ConcurrentHashMap<String, LongAdder>(),(map, words) -> {for(String word:words){// 如果缺少这个key, 就根据后面的函数接口返回一个value 并放入map中,// 如果有,则返回这个valueLongAdder value = map.computeIfAbsent(word, (key) -> new LongAdder());// 第一次时 value时new出来的, 第二次以后, 是返回map中那个存在的LongAdder对象。// 累加器进行累加value.increment();// map.put(word, map.getOrDefault(word, 0) + 1);}});}private static <V> void demo(Supplier<Map<String, V>> supplier, BiConsumer<Map<String, V>, List<String>> consumer) {Map<String, V> counterMap = supplier.get();List<Thread> ts = new ArrayList<>();for (int i = 1; i <= 26; i++) {int idx = i;Thread thread = new Thread(() -> {List<String> words = readFromFile(idx);consumer.accept(counterMap, words);});ts.add(thread);}ts.forEach(Thread::start);ts.forEach(t -> {try {t.join();} catch (InterruptedException e) {e.printStackTrace();}});System.out.println(counterMap);}private static List<String> readFromFile(int idx) {ArrayList<String> words = new ArrayList<>();try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("tmp/" + idx + ".txt")))) {while (true) {String word = in.readLine();if (word == null) {break;}words.add(word);}return words;} catch (IOException e) {throw new RuntimeException(e);}}}
点击查看测试案例生成代码
public class TestSampleForCountAlpha {static final String ALPHA = "abcedfghijklmnopqrstuvwxyz";public static void main(String[] args) {int length = ALPHA.length();int count = 200;ArrayList<String> list = new ArrayList<>(length * count);for (int i = 0; i < length; i++) {char ch = ALPHA.charAt(i);for (int j = 0; j < count; j++) {list.add(String.valueOf(ch));}}Collections.shuffle(list);for (int i = 0; i < 26; i++) {try (PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("tmp/" + (i+1) + ".txt")))) {String collect = list.subList(i * count, (i+1) * count).stream().collect(Collectors.joining("\n"));out.print(collect);} catch (FileNotFoundException e) {throw new RuntimeException(e);}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/842903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NeRF学习笔记

NeRF 学习笔记参考资料十分钟带你快速入门NeRF原理_哔哩哔哩_bilibili 任务概述网络结构:输入 1. 采样点位置数据集是五维数据。theta phi决定了射线的方向,xyz是相机位置。 但是感觉x,y,z,theta phi为什么不直接用xyz表示?感觉剩下两个信息是冗余的。因为可能和射线有关,所…

考研打卡(29)

开局(29) 开始时间 2024-11-28 14:45:31 结束时间 2024-11-28 15:17:32 明天是1125今天去学冠领了几份资料数据结构具有5层节点的AVL树至少有_______个节点。(南昌大学 2015年) A 10 B 12 C 15 D 17B 答案设Nh表示深度为h的平衡二叉树中含有的最少节点数…

解决水库安全监测难题 长期无外接电源 低功耗设备智能化监测系统

解决水库安全监测难题 长期无外接电源 低功耗设备智能化监测系统国内某水库安全监测项目需要监测点分散,且无外接供电。项目年限为4年,不允许使用太阳能电板。因此,我们需要设备具备低功耗且内置电池的功能。为了满足客户的要求,我们的研发团队将采集仪从NLM511T升级到电池…

Android11修改摄像头前后置方法,触觉智能RK3568开发板演示

RK3566/3568安卓Android11系统下,修改摄像头前后置的方法,触觉智能EVB3568开发板演示本文介绍在Android11系统下,修改摄像头前后置属性的方法。使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、An…

70%效率提升:开源AI技术在医疗用药咨询中的应用

一、系统概述 在医疗行业中,信息的准确性和实时性至关重要。我们的开源免费软件——思通数科AI多模态能力平台,通过集成先进的语音识别(ASR)技术,为医疗行业提供了一个全新的解决方案。该平台不仅能够理解多人对话中的语音指令,还能提供精准的药物咨询和用药指导,极大地…

Symbolic Discovery of Optimization Algorithms

目录概Lion代码Chen X., Liang C., Huang D., Real E., Wang K., Liu Y., Pham H., Dong X., Luong T., Hsieh C., Lu Y. and Le Q. V. Symbolic discovery of optimization algorithms. NeurIPS, 2024.概 本文搜索出了一个优雅的, 且经验上似乎更好的优化器: Lion. Lion作者通…

RAG实验:块大小分割实验、矢量存储;FAISS 与 Chroma、向量存储和 Top k、向量存储中的距离度量

比较 RAG 第 1 部分:块大小分割实验我探索了 RAG 模型中的各种块大小,并使用专为评估检索器组件而设计的 RAGAS 评估器对其进行了评估。如您所知,检索器部分会生成随后输入到语言模型 (LLM) 中的“上下文”。 在这个实验中,我采用了BGE作为嵌入技术(它在 HuggingFace 的排…

ssh登录出现sign_and_send_pubkey: no mutual signature supported

加上-o PubkeyAcceptedKeyTypes=+ssh-rsa 例如:ssh -i key.txt stinky@172.16.1.143 -o PubkeyAcceptedKeyTypes=+ssh-rsa

win小工具合集(持续更新)

日常、工作使用的win小工具推荐 一、Snipaste(截屏)安静的躺在后台,随时随地F1光速截屏和编辑,贴图也OK。 二、Ditto(剪贴板)安静的躺在后台,随时随地Ctrl + ~查看和粘贴曾经复制过的内容(包括图片),且支持搜索,再也不用频繁Ctrl + c了。 三、PotPlayer(音视频播放…

高性能C++内存映射库mio使用心得

背景 在C++编程中,高效的数据访问至关重要,而内存映射文件(Memory Mapped Files)提供了一种强大的工具,它允许我们直接将文件内容加载到进程地址空间,从而以极高的效率进行读写操作。今天,我们要向大家推荐一个轻量级且易于使用的开源库——mio。 项目介绍 mio是一个头文…

destoon8.0开启根据时间归档

destoon8.0开启根据时间归档,代码如下:<?php define(DT_REWRITE, true); require ../common.inc.php; $EXT[archiver_enable] or dheader(DT_PATH); //$DT_BOT or dheader(DT_PATH); $N = $M = $T = array(); $mid or $mid = 5; $vmid = $list = 0; foreach($MODULE as $…

外委项目进度控制全攻略:产品经理如何实现精准把控

在现代企业的项目管理中,尤其是面对外委项目,产品经理扮演着至关重要的角色。作为项目的核心负责人,产品经理需要不仅要把控产品质量,还要合理安排开发进度、协调各方资源,并确保项目能够按期、按质交付。尤其对于外委项目来说,由于涉及到第三方供应商和多个团队的协作,…