Java

JVM 指令重排对双重校验锁单例模式的影响

下面的双重校验锁单例是线程安全的吗? public class Singleton { private static Singleton instance = null private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronzied(Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } JVM 内存模型 Java 内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,线程只能访问自己的工作内存,不可以访问其它线程的工作内存。 工作内存中保存了主内存共享变量的副本,线程要操作这些共享变量,只能通过操作工作内存中的副本来实现,操作完毕之后再同步回到主内存当中。

Oct 28, 2018

Java 8 Stream 语法

Java 8 的一个重要新特性就是 Stream。 Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了 Java 8 中的众多新特性之一的聚合操作,开发者可以更容易地使用 Lambda 表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。

Jul 14, 2018

[Java] Splitting a comma-separated string but ignoring commas in quotes

Sometimes we need to parse strings like this: "1234567890","James",man,"New York, NY, USA" And the output we need is as follows: "1234567890" "James" man "New York, NY, USA" We can try the following code:

Mar 24, 2018

JDK 10 新特性

前几天 JDK 10 正式发布了,距离上一次 JDK 9 发布才没几周时间,但是 JDK 10 还是更新了许多新特性。 下面介绍一下几个比较重要的新特性。

Mar 24, 2018

通过 Java API 实现 Kafka Consumer 从最开始消费

之前写项目的时候需要通过 Java API 实现 Consumer 每次都从最开始消费,也就是将 Kafka topic 下所有 partition 的 offset 重置到最初位置。

Mar 6, 2018