java8
文章平均质量分 52
lang20150928
stay hungry stay foolish
展开
-
使用并行流查找素数
使用并行流查找素数原创 2023-04-02 21:27:46 · 45 阅读 · 0 评论 -
mapstruct的使用和原理
通过注解在编译时生成了对象属性映射的方法,不需要手工编写那些毫无技术含量的setter和getter代码。原理其实还是注解的使用了。原创 2023-04-02 21:01:46 · 78 阅读 · 0 评论 -
递归的lambda表达式
递归意味着一个函数调用了自身。在Java中可以编写递归的lambda表达式,但是这个lamba表达式必须被赋值给一个静态变量或一个实例变量,否则会出现编译错误。原创 2023-03-19 21:46:06 · 77 阅读 · 0 评论 -
Java代码规范
由于近年来对于代码质量的要求越来越高,特制定衡泰Java代码规范规则集X-JAVA-RULE,整体要求规则可用可查、循序渐进。可用是指考虑目前已有代码的体量,不满足这些规则的代码能否被修改,如果不能被修改,暂时没有必要纳入其中。可查是指有工具可以扫描出,而不是人工筛查。以下规则均附上了SonaQube中的相应规则名称。直接输入SonaQube即可。比如规则1循序渐进是指以下规则集不是最终版本,根据实际情况后续会不断扩展。规则集会增删,会被继承,但每次不建议加入过多规则,导致无法推进。原创 2023-02-27 10:28:52 · 655 阅读 · 0 评论 -
DCL实现单例类以及安全问题
DCL实现单例以及防止反射打破单例的问题原创 2023-02-26 20:47:13 · 59 阅读 · 0 评论 -
Druid获取连接失败(GetConnectionTimeoutException: wait millis 5000, active 1)
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 5000, active 1原创 2022-06-08 10:47:44 · 6926 阅读 · 1 评论 -
安全的发布
以下是线程不安全的延迟初始化public class UnsafeLazyInitialization { private static Resource resource; public static Resource getInstance() { if (resource == null) resource = new Resource(); // unsafe publication return resource;原创 2022-05-07 21:58:47 · 137 阅读 · 0 评论 -
avoiding deadlock
Inducing a lock ordering to avoid deadlockprivate static final Object tieLock = new Object();public void transferMoney(final Account fromAcct, final Account toAcct, final DollarAmount amount) throws InsufficientFundsException { class Helper {原创 2022-04-30 13:36:36 · 95 阅读 · 0 评论 -
如何减少锁的竞争
在并发程序中,对可伸缩性的最主要威胁就是独占方式的资源锁,有3中方式可以降低锁的竞争程度:减少锁的持有时间降低锁的请求频率使用带有协调机制的独占锁减少锁的范围降低发生竞争可能性的一种有效方式就是缩短锁的持有时间。例如,将一些与锁无关的代码移除同步代码块,尤其是那些开销较大的操作,以及可能被阻塞的操作,例如I/O操作。比如在以下程序清单中,其中的锁被持有过长的时间。userLocationMatches方法在一个Map对象中查找用户的位置,并使用正则表达式进行匹配以判断结果值是否匹配所提供的原创 2022-04-23 11:16:53 · 378 阅读 · 0 评论 -
不可变与线程安全
通过锁方法解决多线程安全问题,但性能不好考虑锁细化This combination of an immutable holder object for multiple state variables related by an invariant,and a volatile reference used toensure its timely visibility, allows VolatileCachedFactorizer to be thread-safeeven though it原创 2022-03-15 23:17:45 · 70 阅读 · 0 评论 -
JVM对象创建与内存分配机制深度剖析
JVM专题对象的创建对象创建的主要流程:类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等。分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把 一块确定大小的内存从Java堆中划分出来。.原创 2022-02-01 20:32:48 · 143 阅读 · 0 评论 -
JVM内存模型深度剖析与优化
JVM专题JDK体系结构Java语言的跨平台特性JVM整体结构及内存模型补充一个问题:在minor gc过程中对象挪动后,引用如何修改?对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。.原创 2022-02-01 19:58:47 · 95 阅读 · 0 评论 -
JVM专题
从JDK源码级别彻底剖析JVM类加载机制原创 2022-02-01 16:47:01 · 365 阅读 · 0 评论 -
Future&CompletableFuture实战
Callable&Future&FutureTask介绍直接继承Thread或者实现Runnable接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景,而Future和FutureTask就可以和Callable接口配合起来使用。Callable和Runnable的区别思考:为什么需要 Callable?@FunctionalInterfacepublic interface Ru原创 2021-12-12 14:02:55 · 184 阅读 · 0 评论 -
MapReduce实现流的map和filter操作
/** * Performs a <a href="package-summary.html#Reduction">reduction</a> on the * elements of this stream, using the provided identity, accumulation and * combining functions. This is equivalent to: * <pre>{@code ...原创 2021-07-03 12:05:07 · 184 阅读 · 0 评论 -
JDK8格式化和解析日期
// 日期格式化问题 最重要的类是DateTimeFormatter类 所有的DateTimeFormatter实例都是线程安全的{ LocalDate localDate = LocalDate.of(2021, 6, 28); // 20210628 String basicIsoDate = localDate.format(DateTimeFormatter.BASIC_ISO_DATE); // 2021-06-28 String isoLocalDate原创 2021-06-28 21:01:09 · 120 阅读 · 0 评论 -
JDK8提供的日期时间类
{ LocalDate date = LocalDate.of(2021, 6, 28); int year = date.getYear(); Month month = date.getMonth(); int dayOfMonth = date.getDayOfMonth(); DayOfWeek dayOfWeek = date.getDayOfWeek(); int len = date.lengthOfMonth(); boolean le原创 2021-06-28 20:53:46 · 79 阅读 · 0 评论 -
Java8 List的排序优化演变
List<Person> persons = new ArrayList<>();// 通过内部类的方式Collections.sort(persons, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.getAge() - o2.getAge(); }});// 使用Lambada表达式代替内原创 2021-06-21 19:58:00 · 73 阅读 · 0 评论 -
Spring JMX编程学习(三)- 自定义JMX客户端
系列文章目录系列文章目录Java管理扩展JMX入门学习Spring JMX编程学习(一)- 手动注册bean到MBeanServerSpring JMX编程学习(二)- 以Bean的方式注册MbeanServer文章目录系列文章目录系列文章目录 前言 一、暴露MBeanServer 二、自定义客户端1. 创建客户端连接clientConnector2. 注册MBean代理Bean3. 创建客户端启动类 三、源码分析1. 服务端2. 客户端 总结 前言在前面的项目当中,我们通过Sprin原创 2020-11-20 17:52:59 · 779 阅读 · 2 评论 -
Spring JMX编程学习(一)- 手动注册bean到MBeanServer
系列文章目录Java管理扩展JMX入门学习文章目录系列文章目录 前言 一、手动将bean导出到JMX1. 引入库2. 创建接口和实现类3. 注册Bean并进行暴露4. 创建一个主类并启动5. 源码分析 总结 前言在上一章当中,我们学习了原生java中JMX的知识,本章开始学习在Spring当中如何使用JMX编程。具体来说,Spring的JMX支持提供了四个核心功能:将任何Spring bean自动注册为JMX MBean灵活的机制来控制您的bean的管理界面通过远程JSR-160连原创 2020-11-19 20:42:40 · 684 阅读 · 0 评论 -
Java管理扩展JMX入门学习
系列文章目录文章目录系列文章目录 前言 一、标准MBeans1. 创建MBean接口2. MBean实现类 3. 创建一个JMX代理用于管理资源4. JConsole作为客户端管理5. 通知 二、MXBeans1. 自定义数据类型2. 创建MXBean接口3. 创建MXBean实例4. 创建JMX代理管理资源 三、远程连接与自定义JMX客户端1. 通过端口暴露程序用于远程管理2. 自定义JMX客户端管理程序 总结 前言Java管理扩展(JMX)(Java Management Extension原创 2020-11-19 14:41:18 · 499 阅读 · 1 评论 -
关于ResourceBundle国际化的一些思考
文章目录 前言 一、Java中的国际化 二、一些痛点以及解决方案1.引入库2.读入数据 三、行业内优秀的解决方案1.引入库2.读入数据 总结 前言国际化这个词听起来很高大上,其实所谓的国际化就是针对不同的语言、地区采用不同的提示,比如遇见中国文就是“你好”,如果是美国人就是“Hello”,因为这两个国家的母语不一样,然后即使是同一个国家的不同地区,语言也有可能不一样,比如在中国大陆地区,使用的是简体,而在台湾地区,使用的就是繁体。在Java中处理国际化的主要类是java.util.Resource.原创 2020-11-17 22:09:28 · 897 阅读 · 2 评论 -
关于Annotation的那些事儿
注解的定义说明对于一个注解一般包括以下几个部分:Target:适用目标有一个注解如下所示:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Indexedpublic @interface Component { /** * The value may indicate a suggestion for a logical component name, * to be turned原创 2020-08-20 16:52:27 · 1396 阅读 · 0 评论 -
list.toArray的坑
Object[] objArray = new Object[]{new Integer("2")};List<Object> list = Arrays.asList(objArray);String[] strings = list.toArray(new String[list.size()]);System.out.println(strings);上面的代码会抛出异常吗?为什么?原创 2020-06-05 18:35:12 · 723 阅读 · 0 评论 -
java8 Stream 流对象返回单一值案例
通过返回第一个// org.springframework.boot.logging.LoggingSystem/** * Detect and return the logging system in use. Supports Logback and Java Logging. * @param classLoader the classloader * @return the logging system */public static LoggingSystem get(ClassLo原创 2020-05-29 17:42:09 · 14303 阅读 · 1 评论 -
Java处理Excel数据库数据
所需要的依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <g...原创 2020-03-17 20:39:25 · 102 阅读 · 0 评论 -
Better Java In EngLish
Note: I’m working on version 2 of this guide and I need your help! Please use this form to give me feedback on what you think should go in the next version. Thanks!Better JavaJava is one of the most...转载 2020-03-04 11:14:08 · 640 阅读 · 0 评论 -
Better Java
Better JavaJava 虽作为最流行的编程语言之一,但是似乎并没有什么人很享受用它。好吧,Java 确实是这样的一门编程语言,从最近发布不久的 Java 8 开始,为了更好的使用 Java,我决定收集一些库,实践和工具等相关资料。“更好” 是主观的,所以推荐使用我所说的建议的某些部分,而不是一下子全部按照这些建议来做。请尽情添加其他意见并提交 PR。这篇文章原始发布在我的博客.其他...转载 2020-03-04 11:10:28 · 210 阅读 · 0 评论 -
Java 8 Concurrency Tutorial: Atomic Variables and ConcurrentMap
Welcome to the third part of my tutorial series about multi-threaded programming in Java 8. This tutorial covers two important parts of the Concurrency API: Atomic Variables and Concurrent Maps. Both ...转载 2020-02-28 19:01:48 · 151 阅读 · 0 评论 -
Java 8 Concurrency Tutorial: Synchronization and Locks
Welcome to the second part of my Java 8 Concurrency Tutorial out of a series of guides teaching multi-threaded programming in Java 8 with easily understood code examples. In the next 15 min you learn ...转载 2020-02-28 18:55:37 · 345 阅读 · 0 评论 -
Java 8 Concurrency Tutorial: Threads and Executors
Java 8 Concurrency Tutorial: Threads and ExecutorsWelcome to the first part of my Java 8 Concurrency tutorial. This guide teaches you concurrent programming in Java 8 with easily understood code exam...转载 2020-02-28 18:48:54 · 246 阅读 · 0 评论 -
Java 8 Stream Tutorial
Java 8 Stream TutorialThis example-driven tutorial gives an in-depth overview about Java 8 streams. When I first read about the Stream API, I was confused about the name since it sounds similar to In...转载 2020-02-28 15:55:11 · 198 阅读 · 0 评论 -
Modern Java - A Guide to Java 8
Modern Java - A Guide to Java 8This article was originally posted on my blog.“Java is still not dead—and people are starting to figure that out.”Welcome to my introduction to Java 8. This tutoria...转载 2020-02-27 15:13:57 · 258 阅读 · 0 评论