首页 > 编程语言 >《Java核心技术I》映射条目的原子更新

《Java核心技术I》映射条目的原子更新

时间:2024-12-09 18:29:19浏览次数:8  
标签:ConcurrentHashMap java Path 映射 核心技术 util import Java public

映射条目的原子更新

ConcurrentHashMap只有部分原子更新。

JavaAPI提供了一些新方法,例如:compute方法可以提供一个键和一个计算新值的函数。

map.compute(word,(k,v)->v == null ? 1 : v+1)

注释:ConcurrentHashMap中不允许有null值。很多方法都使用null来指示映射中某个给定的键不存在。

使用并发散列映射来统计一个目录树的Java文件中的所有单词

package concurrentHashMap;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Scanner;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CHMDemo {
    
    public static ConcurrentHashMap<String,Long> map = new ConcurrentHashMap<>();
    
    public static void process(Path file) {
        try(var in = new Scanner(file)){
            while(in.hasNext()) {
                String word = in.next();
                map.merge(word, 1L, Long::sum);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static Set<Path> descendants(Path rootDir) throws IOException{
        try(Stream<Path> entries = Files.walk(rootDir)){
            return entries.collect(Collectors.toSet());
        }
    }

    public static void main(String[] args) throws InterruptedException, IOException {
        int processors = Runtime.getRuntime().availableProcessors();
        ExecutorService executor = Executors.newFixedThreadPool(processors);
        Path pathToRoot = Path.of("C:\\Program Files\\Java\\jdk1.8.0_131\\src");
        for (Path p : descendants(pathToRoot)) {
            if(p.getFileName().toString().endsWith(".java")) {
                executor.execute(()->process(p));
            }
        }
        executor.shutdown();
        executor.awaitTermination(10, TimeUnit.MINUTES);
        map.forEach((k,v)->{
            if(v>=10)
                System.out.println(k+" occurs "+v+" times");
        });
    }

}

标签:ConcurrentHashMap,java,Path,映射,核心技术,util,import,Java,public
From: https://blog.csdn.net/qq_36324341/article/details/144354723

相关文章

  • Java基础 —— 集合(二)
    Collection接口Collection接口常用方法booleanadd(Ee):在集合末尾添加元素booleanremove(Objecto):若集合中存在与o相同的元素,则删除,然后返回truevoidclear():清空集合内的所有元素booleancontains(Objecto):判断集合中是否存在该元素booleanisEmpty():判断集合是否为空......
  • JS-2 JavaScript语句、标识符
    1、语句JavaScript程序的单位是行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句varnum=10;语句以分号结尾,一个分号就表示一个语句结束。 在html中用script写css 2、标识符标识符(identifier)指的是用来识别各种值的合法名称。最常见的标识符......
  • Java 的 SPI 都不了解?这很难让你通过
    引言今天和大家分享一下一个在 Java 开发中非常重要的概念—— SPI(ServiceProviderInterface)。SPI 直译叫做服务提供者接口,是一种用于动态加载服务的机制。它不仅能够帮助我们构建更加灵活和可扩展的应用程序,还能让我们的代码更加简洁和易于维护。希望通过本文,大家能够对 ......
  • Java基础 —— 集合(一)
    集合(一)数组和集合的区别数组是固定长度的数据结构,而集合是动态的数据结构数组可以包含基本数据类型和对象,集合只能包含对象数组只能存放同一类型的数据,而集合可以蹲房不同类型的数组可以直接访问元素,集合需要通过迭代器或其他方法访问元素集合的分类 根据上图......
  • 白骑士的JavaScript教学生态系统篇之现代前端开发流程 5.3.4 持续集成与部署(CI/CD)
            在现代软件开发中,持续集成与持续部署(CI/CD)已经成为提高开发效率、确保软件质量的关键流程。CI/CD不仅能够自动化代码的构建、测试和部署,还能帮助开发团队快速地将新功能和修复发布到生产环境。本文将深入探讨CI/CD的概念、优势、常用工具以及如何在JavaScript......
  • JavaScript 写css的内联样式
    一、使用style属性-直接设置单个CSS属性//获取元素varelement=document.getElementById("myElement");//设置样式element.style.color="red";element.style.backgroundColor="blue";element.style.fontSize="20px";二、使用cssText属性-一次性设......
  • 21天掌握javaweb-->第12天:Spring Boot项目优化与安全性
    SpringBoot项目优化与安全性1.SpringBoot性能优化1.1减少依赖项评估项目的依赖项,并确保只引入必要的依赖。较多的依赖项可能会增加启动时间,因为它们需要被扫描和初始化。通过删除不需要的依赖项或仅引入必要的模块,可以减少类路径的扫描和初始化时间。1.2调整自动配置......
  • Java 基础之 XQuery:强大的 XML 查询语言
    一、什么是XQueryXQuery是一种函数式语言,专门用于检索以XML格式存储的信息。它负责从XML文档中查找和提取元素及属性,在网络服务中有着广泛的应用,比如提取信息、生成摘要报告、进行数据转换等。XQuery是W3C设计的一种针对于XML的查询语言,类似于SQL对数据库的作用......
  • Java类转字节码工具
    学Java安全的时候发现好多师傅分析漏洞的时候直接就给了一段Base64字节码,然后虽然一些师傅也会给出来对应的代码,但是有些小白是不知道怎么把一个java类转成Base64字节码的。对于刚学Java安全的小白来说真的太不友好啦,也不知道这玩意儿是什么意思,所以这里写一个小工具,专门用来把Ja......
  • java poi 读取模版excel写入数据并保持原本单元格样式
    publicResult<Object>testreport(@RequestParamMap<String,String>params,HttpServletResponseresponse)throwsException{Stringfilename="wenjian.xlsx";StringinFilePath="C:\\Users\\xnn\\Desktop\\附件一:高登......