用 Project Reactor 的 bufferTimeout 代替 BufferTrigger 做高并发计数聚合
用 Project Reactor 的 bufferTimeout 代替 BufferTrigger 做高并发计数聚合 记录一次在计数服务里做「粉丝数聚合写」的实现。原教程用快手的 BufferTrigger,我改用了 Spring Boot 自带的 Project Reactor,零新增依赖。 背
Java21的虚拟线程真的完美吗?
Java21的虚拟线程真的完美吗? 锁不是不在了,只是没人能去拿。你看着它,等着它,却永远不能碰到它。这就是虚拟线程的浪漫。 我最近的项目一律使用的 Java 21,其中一个重要原因是看中了 虚拟线程(Virtual Threads) 这一新特性。Java 21 将虚拟线程从预览阶段带入正式版,提供
Java之JUC学习--part5
Java之JUC学习--part5 无锁 CAS 原理 无锁编程:Lock Free CAS 的全称是 Compare-And-Swap,是 CPU 并发原语 CAS 并发原语体现在 Java 语言中就是 sun.misc.Unsafe 类的各个方法,调用 UnSafe 类中的 CAS 方法,JVM
Java之JUC学习--part4
Java之JUC学习--part4 JMM(Java内存模型) 内存模型 Java 内存模型是 Java Memory Model(JMM),本身是一种抽象的概念,实际上并不存在,描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式 JMM
Java之JUC学习--part3
Java之JUC学习--part3 “线程同步”相关API wait-notify 基本使用 需要获取对象锁后才可以调用 锁对象.wait(),notify 随机唤醒一个线程,notifyAll 唤醒所有线程去竞争 CPU Object 类 API: public final void notify
JUC面试题之交替打印
JUC面试题之交替打印 在juc笔试题中很容易考到一种题型就是多个线程交替打印,其实这个问题有很多的解题办法。我这里都打个样。 题目:3个线程,分别打印a,b,c。但是要求三个线程依次打印。循环五次。 方法一:使用wait-notify package com.hanserwei.juc;
imp
Java之JUC学习--part2
Java之JUC学习--part2 同步 临界区 临界资源:一次仅允许一个进程使用的资源成为临界资源 临界区:访问临界资源的代码块 竞态条件:多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件 一个程序运行多个线程是没有问题,多个线程读共享资源也没有问题,在多个线
Java之JUC学习--part1
Java之JUC学习--part1 参考视频:https://www.bilibili.com/video/BV16J411h7Rd 笔记的整体结构依据视频编写,并随着学习的深入会补充很多知识 进程与线程 概述 进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位 进程的特征
Reactive-Stream规范
Reactive-Stream规范 传统的数据处理模式是生产者主动推送。如下图所示: 生产者(Producer):图左侧的“生产者”代表数据源。它拥有“巨大”或“大量”的数据,并以 10000w/s 的高速度源源不断地产生请求。 消费者(Consumer):图右侧的方框代表消费者,即处理这些数据的服