如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)

如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)

你好,我是看山。

前面写过一篇文章 《如果非要在多线程中使用 ArrayList 会发生什么?》,有读者反馈,Java 11 代码已经修复,还会出现 null 元素。

为了便于理解,当时只是通过代码执行顺序说明了异常原因。其实多线程中还会涉及 Java 内存模型,本文就从这方面说明一下。

更多

看山聊 Java:Date 与 LocalDate 或 LocalDateTime 互相转换

看山聊 Java:Date 与 LocalDate 或 LocalDateTime 互相转换

你好,我是看山。

从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时间 API 之间切换,并行使用。今天就来说说,java.util.Datejava.time.LocalDate/LocalDateTime如何互相转换。

更多

看山聊 Java:Java8 中的时间类及常用 API

看山聊 Java:Java8 中的时间类及常用 API

该图片由Önder ÖrtelPixabay上发布

你好,我是看山。

年龄大的 Java 程序员都有体会,Java8 之前,Java 提供了一组时间类:java.util.Datejava.util.Calendar及其子类和工具类等。功能比较全面,最大的缺点是难用。所以很多团队直接放弃原生时间类,使用第三方的时间类库。后来,Java8 吸收了 joda-time 的优秀设计,提供了一组新的时间处理 APIjava.time.

本文作为这个系列的第一篇,扒一扒DateCalendar存在的问题,说说 Java8 提供的时间库是怎么解决这些问题的。后续再说一下 Java8 中java.time.包中的一些核心类,例如LocalDateLocalTimeLocalDateTimeZonedDateTimePeriodDuration

更多

程序员进阶书单2021版

程序员进阶书单2021版

你好,我是看山。

今天列一下技术相关的书单,本文是第一版,后续持续更新。

更多

Geek 青年说北京沙龙分享

Geek 青年说北京沙龙分享

你好,我是看山。

5 月 23 号参加了 infoQ 写作平台组织的线下沙龙,瞻仰了很多大佬的英姿。在 Geek 青年说的环节,也壮起胆量上台分享了自己的一些观点。第一次上台,面对台下的大佬们,难免有些紧张。不过思考不易,整理出来,希望能够帮到有相同困惑的同仁们。

更多

一文掌握 Java8 的 Optional 的 6 种操作

一文掌握 Java8 的 Optional 的 6 种操作

你好,我是看山。

Java8 中引入了一个特别有意思类:Optional,一个可以让我们更加轻松的避免 NPE(空指针异常,NullPointException)的工具。

很久很久以前,为了避免 NPE,我们会写很多类似if (obj != null) {}的代码,有时候忘记写,就可能出现 NPE,造成线上故障。在 Java 技术栈中,如果谁的代码出现了 NPE,有极大的可能会被笑话,这个异常被很多人认为是低级错误。Optional的出现,可以让大家更加轻松的避免因为低级错误被嘲讽的概率。

更多

一文掌握 Java8 Stream 中 Collectors 的 24 个操作

一文掌握 Java8 Stream 中 Collectors 的 24 个操作

你好,我是看山。

Java8 应该算是业界主版本了,版本中重要性很高的一个更新是Stream流处理。关于流处理内容比较多,本文主要是说一下Stream中的Collectors工具类的使用。

更多

面试真题:无重复字符的最长子串

面试真题:无重复字符的最长子串

你好,我是看山。

来一个算法题,面试之后查了一下,是 LeetCode 的第三题,难度中等。居然在面试过程中碰到 LeetCode 真题,事后总结一波。加深印象。

更多

SpringBoot 实战:自定义 Filter 优雅获取请求参数和响应结果

SpringBoot 实战:自定义 Filter 优雅获取请求参数和响应结果

你好,我是看山。

更多

SpringBoot 实战:通过 BeanPostProcessor 动态注入 ID 生成器

SpringBoot 实战:通过 BeanPostProcessor 动态注入 ID 生成器

你好,我是看山。

在分布式系统中,我们会需要 ID 生成器的组件,这个组件可以实现帮助我们生成顺序的或者带业务含义的 ID。

目前有很多经典的 ID 生成方式,比如数据库自增列(自增主键或序列)、Snowflake 算法、美团 Leaf 算法等等,所以,会有一些公司级或者业务级的 ID 生成器组件的诞生。本文就是通过 BeanPostProcessor 实现动态注入 ID 生成器的实战。

更多