高性能 Disruptor——消除伪共享

一、CPU Cache 存储设备往往是速度越快价格越昂贵,速度越快价格越低廉。在计算机中,CPU 的速度远高于主存的速度,而主存的速度又远高于磁盘的速度。为了解决不同存储部件的速度不对等问题,让高速设备充分发挥性能,引入了多级缓存机制。 为了解决内存和 CPU 的速度不匹配问题,相继引入了 L1 Cache、L2 Cache、L3 Cache,数字越小,容量越小,速度越快,位置越接近 CPU。 ...

不可不说的 Java “锁”事

一、前言 Java 提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自 JDK 8和 Netty 3.10.6)和使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java 中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文...

Java 并发编程——线程池的异常处理机制

一、前言 1.1 文章起因 这篇文章的起因来源于一个 BUG,这个 BUG 和上篇文章《Java SynchronizedSet 线程不安全之坑》 有点关系。简单来说,就是在线程池中执行任务,任务本身未做异常处理,导致出现异常后任务停止。 出错的原因来自对 Collections.synchronizedSet(new HashSet<>()) 的线程不安全访问,抛出了 Concurr...

Java SynchronizedSet 线程不安全之坑

一、前言 一般而言,想要构造出线程安全的 Set,我们会使用 Collections.synchronizedSet 方法,如下所示。 1Set<User> set = Collections.synchronizedSet(new HashSet<>()); 但这并不意味着,你可以安全的使用该集合的任何方法,如果没有仔细的了解过其实现的话,一不小心就会踩进坑中。 最近我在...

Navicat Premium 15 安装与激活

偶然发现 Navicat 已经更新到了15 了,今天就来把 Navicat 升级一下。Navicat15 的激活和 Navicat12 一致,可以参考《Navicat Premium 12.0.27 安装与激活》。 首先前往官网自行下载 Navicat15 的安装包。然后下载激活工具: CSDN(速度较快,2个积分,自愿支持):点我下载 百度网盘(可能被和谐,失效请留言):链接:https...

Parallel Stream 的错误实践

一、前言 Java8 Stream 流的出现,极大的简化了业务需求中对集合数据的加工处理操作。虽然好用,但是一旦使用不当,也会带来意想不到的结果,本文记录使用 Parallel Stream 的错误实践。 1234List<Object> sourceList = ...;List<Object> list = new ArrayList();sourceList.stre...

详解 Spring 定时任务的调度方式

在 Spring 中,我们可以使用 @Scheduled 方便的进行定时任务的执行,其支持以下三种调度方式:Cron、FixedDelay、FixedRate。下面分别介绍在标准模式下和异步模式下这三种调度方式的不同。 一、标准模式 1.1 示例准备 创建一个 SpringBoot 初始程序,依赖包只需要引入 spring-boot-starter-web 即可: 123456<depend...

2019 年终总结

自从进入大学开始,总觉时间开启了快进模式,一年一年不知不觉就过去了,转瞬又是新的一年的开始。 2020 是一个特殊的年份,在不少电影中它是未来的代名词,在国家的红头文件中它是消灭贫困人口的 DeadLine。哈哈,庆幸自己还没有被消灭。 言归正传,2019 年对我来说是一个特殊的年份,因此 2020 年的第一篇博文就来总结下 2019 年吧。 一、学生 身处高考地狱难度的江苏省,机缘巧合,考入本科...
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×