如果非要在多线程中使用 ArrayList 会发生什么?(第二篇)
你好,我是看山。
前面写过一篇文章 《如果非要在多线程中使用 ArrayList 会发生什么?》,有读者反馈,Java 11 代码已经修复,还会出现 null 元素。
为了便于理解,当时只是通过代码执行顺序说明了异常原因。其实多线程中还会涉及 Java 内存模型,本文就从这方面说明一下。
你好,我是看山。
前面写过一篇文章 《如果非要在多线程中使用 ArrayList 会发生什么?》,有读者反馈,Java 11 代码已经修复,还会出现 null 元素。
为了便于理解,当时只是通过代码执行顺序说明了异常原因。其实多线程中还会涉及 Java 内存模型,本文就从这方面说明一下。
你好,我是看山。
从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时间 API 之间切换,并行使用。今天就来说说,java.util.Date
与java.time.LocalDate/LocalDateTime
如何互相转换。
该图片由Önder Örtel在Pixabay上发布
你好,我是看山。
年龄大的 Java 程序员都有体会,Java8 之前,Java 提供了一组时间类:java.util.Date
、java.util.Calendar
及其子类和工具类等。功能比较全面,最大的缺点是难用。所以很多团队直接放弃原生时间类,使用第三方的时间类库。后来,Java8 吸收了 joda-time 的优秀设计,提供了一组新的时间处理 APIjava.time.
。
本文作为这个系列的第一篇,扒一扒Date
和Calendar
存在的问题,说说 Java8 提供的时间库是怎么解决这些问题的。后续再说一下 Java8 中java.time.
包中的一些核心类,例如LocalDate
、LocalTime
、LocalDateTime
、ZonedDateTime
、Period
、Duration
。
你好,我是看山。
5 月 23 号参加了 infoQ 写作平台组织的线下沙龙,瞻仰了很多大佬的英姿。在 Geek 青年说的环节,也壮起胆量上台分享了自己的一些观点。第一次上台,面对台下的大佬们,难免有些紧张。不过思考不易,整理出来,希望能够帮到有相同困惑的同仁们。
你好,我是看山。
Java8 中引入了一个特别有意思类:Optional
,一个可以让我们更加轻松的避免 NPE(空指针异常,NullPointException)的工具。
很久很久以前,为了避免 NPE,我们会写很多类似if (obj != null) {}
的代码,有时候忘记写,就可能出现 NPE,造成线上故障。在 Java 技术栈中,如果谁的代码出现了 NPE,有极大的可能会被笑话,这个异常被很多人认为是低级错误。Optional
的出现,可以让大家更加轻松的避免因为低级错误被嘲讽的概率。
你好,我是看山。
Java8 应该算是业界主版本了,版本中重要性很高的一个更新是Stream
流处理。关于流处理内容比较多,本文主要是说一下Stream
中的Collectors
工具类的使用。
你好,我是看山。
来一个算法题,面试之后查了一下,是 LeetCode 的第三题,难度中等。居然在面试过程中碰到 LeetCode 真题,事后总结一波。加深印象。
你好,我是看山。
在分布式系统中,我们会需要 ID 生成器的组件,这个组件可以实现帮助我们生成顺序的或者带业务含义的 ID。
目前有很多经典的 ID 生成方式,比如数据库自增列(自增主键或序列)、Snowflake 算法、美团 Leaf 算法等等,所以,会有一些公司级或者业务级的 ID 生成器组件的诞生。本文就是通过 BeanPostProcessor 实现动态注入 ID 生成器的实战。