202111-19 解决JDK8的ParallelStream遍历无序的问题 JDK8的ParallelStream遍历无序ParallelStream其实就是一个并行执行的流它通过默认的ForkJoinPool,可能提高你的多线程任务的速度.Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务切分成多个小任务,这表示每个任务都是一个操作,因此像以下的程式片段:Listlist=Arrays.asList(1,2,3,4,5);list.parallelStream().forEach(out::println);你得到的展示顺序不一定会是1、2、3、4、5,而可能是任... 继续阅读 >
202111-17 基于JDK8-lambda表达式四种forEach性能对比 jdk8新特性流Stream编程看了网上一些性能的比较,这里自己写一个进行测试对比以下四种普通forEach、java8中新的forEach、stream+forEach、parallelStream+forEachpackagecom.huajie.Lambda;importlombok.extern.slf4j.Slf4j;importorg.junit.Before;importorg.junit.Test;importjava.util.ArrayList;importjava.util.List;@Slf4jpublicclassMode2{List<User>listUser=newArrayList<>();@Be... 继续阅读 >
202109-10 JDK8中的HashMap初始化和扩容机制详解 一、HashMap初始化方法HashMap()不带参数,默认初始化大小为16,加载因子为0.75;HashMap(intinitialCapacity)指定初始化大小;HashMap(intinitialCapacity,floatloadFactor)指定初始化大小和加载因子大小;HashMap(Map<?extendsK,?extendsV>m)用现有的一个map来构造HashMap。二、分析初始化过程1、初始化代码测试用例Map<String,String>map=newHashMap<>(3);map.put("id","1");map.put("name","riema... 继续阅读 >
202108-20 JDK8中新增的Optional工具类基本使用 Optional类的使用 JDK8以前,编写代码,通常会出现NullPointerException(空指针异常),通常情况下我们都是通过if...else...来对对象进行为空判断,然后再进行逻辑处理,代码写起来也比较冗余。 JDK8新增了Optional类,使用该类可以避免我们对空指针的检查,使代码看起来比较优雅。 最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的... 继续阅读 >
202108-10 深入理解JDK8中Stream使用 概述Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用StreamAPI来并行执行操作。简而言之,StreamAPI提供了一种高效且易于使用的处理数据的方式。特点:不是数据结构,不会保存数据。不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留... 继续阅读 >
202011-25 Ubuntu安装jdk8常用方法流程解析 安装方式:1):通过ppa(源)方式安装.2):通过官网安装包安装.JDK官网下载地址一:使用ppa(源)方式安装:1):添加ppa源sudoadd-apt-repositoryppa:webupd8team/javasudoapt-getupdate2):安装oracle-java-installer(jdk8版本)sudoapt-getinstalloracle-java8-installer注:安装器会提示是否同意条款,根据提示选择yes即可,若不想手动输入,则可以采用以下方式自动完成:echooracle-java8-installershared/accepted... 继续阅读 >
202010-10 为什么JDK8中HashMap依然会死循环 JDK8中HashMap依然会死循环!是否你听说过JDK8之后HashMap已经解决的扩容死循环的问题,虽然HashMap依然说线程不安全,但是不会造成服务器load飙升的问题。然而事实并非如此。少年可曾了解一种红黑树成环的场景,=v=今日在查看监控时候发现,某一台机器load飙升感觉问题不对劲,ssh大法登陆机器,top,top-Hp,jstack,jmap四连击保存下来堆栈,cpu使用最高的线程,内存信息准备分析。首先查看使用最耗费cpu的线程堆栈信息catstac... 继续阅读 >
202010-09 解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法 mybatis-plus使用jdk8的LocalDateTime查询时报错:org.springframework.dao.InvalidDataAccessApiUsageException:Errorattemptingtogetcolumn'update_time'fromresultset. Cause:java.sql.SQLFeatureNotSupportedException;null;nestedexceptionisjava.sql.SQLFeatureNotSupportedException废话少说,直接上例子代码:实体类:以下实体类创建时间字段使用了LocalDateTime @Data@EqualsAndHashCode(callSu... 继续阅读 >
202010-09 一文带你入门JDK8新特性——Lambda表达式 Lambda简介Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。JDK也提供了大量的内置函数式接口供我们使用,使得Lambda表达式的运用更加方便、高效。对接口的要求虽然使用Lambda表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用Lambda表达式来实现。Lambda规定接口中只能有一个需要被实现的方法,不... 继续阅读 >
202010-09 Vscode中不再支持JDK8的原因分析及解决方案 昨天还用得好好的,今天突然给我说仅支持JDK11以上了,也不能进行正常的代码补全了。看了一下,是LanguageSupportforJava™byRedHat这个拓展更新到0.65.0的原因。因为Eclipse平台决定将JDK11作为9月发布的最低要求,而vscode是依赖eclipsejdt.ls服务器的,所以需要更新到JDK11。解决方案1如果不是必须使用JDK8,可以选择更换为JDK11或更新解决方案2官方说可以在settings.json中配置java.configuration.runtimes,这个配... 继续阅读 >
202010-08 JDK8并行流及串行流区别原理详解 由于处理器核心的增长及较低的硬件成本允许低成本的集群系统,致使如今并行编程无处不在,并行编程似乎是下一个大事件。Java8针对这一事实提供了新的streamAPI及简化了创建并行集合和数组的代码。让我们看一下它是怎么工作的。假设myList是List<Integer>类型的,其中包含500,000个Integer值。在Java8之前的时代中,对这些整数求和的方法是使用for循环完成的。for(inti:myList){result+=i;}从Java8开始,... 继续阅读 >
202010-08 JDK8配置环境变量的bat文件的详细教程 网上教程不少,有些好惨。我的JDK在这里,只安装一次,后面直接压缩,这样就制成了解压版,解压配置环境变量即可用,妙。打开看看再打开了解目录结构的目的,为了改bat文件,第三行!@echooffsetregpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\EnvironmentsetJAVA_HOME=E:\soft\jdk\jdk8\jdk1.8.0_152echo.echo************************************************************echo*... 继续阅读 >
202010-08 深度思考JDK8中日期类型该如何使用详解 在JDK8之前,处理日期时间,我们主要使用3个类,Date、SimpleDateFormat和Calendar。这3个类在使用时都或多或少的存在一些问题,比如SimpleDateFormat不是线程安全的,比如Date和Calendar获取到的月份是0到11,而不是现实生活中的1到12,关于这一点,《阿里巴巴Java开发手册》中也有提及,因为很容易犯错:不过,JDK8推出了全新的日期时间处理类解决了这些问题,比如Instant、LocalDate、LocalTime、LocalDateT... 继续阅读 >