一、消息从产生到消费过程 一个消息从生产者产生,到被消费者消费,主要经过这 3 个过程: 生产者产生消息 消息发送到存储端,保存下来 消息推送到消费者,消费者消费完,ack应答 因此如何保证MQ不丢失消息,可以从这三个阶段阐述: 生产者保证不丢消息
一、部署前的说明 本文根据官网资料搭建,官方网站部署文档地址:https://rocketmq.apache.org/zh/docs/4.x/deployment/01deploy 本文采用3台服务器,多节点(集群)多副
线程进入WAITING状态有以下几种情况: 调用Object.wait()方法,该方法会使得当前线程进入等待状态,等待其他线程调用同一个对象的notify()或notifyAll()方法唤醒该线程。 调用Thread.join()方法,该方法会使得当前线程等待指定线程的结束,当指定线程结束时,当前线
线程调度器(Thread Scheduler)是操作系统内核中的一个重要组件,负责分配并管理处理器时间片,控制多线程程序的执行顺序。当有多个线程同时运行时,线程调度器会在这些线程之间进行切换,使得每个线程都有机会使用 CPU 资源,并实现任务的并发执行。 时间分片(Time Slicing)是指将可
Fork/Join框架是一个用于并行化执行任务的框架,它是Java 7引入的一个新特性,专门用于方便地利用多核CPU的性能优势,通过分治法的策略来将任务分解为更小的子任务,然后并行执行这些子任务,最后再合并子任务的结果。 Fork/Join框架的核心是ForkJoinPool,它是一种特殊的线程池,
CPU密集型任务:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯 CPU 计算。尽量使用较小的线程池,一般为CPU核心数+1。因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,会造成CPU过度切换。 IO密集型任务:比如像 MySQL 数据库、文件的读
不可变对象(Immutable object)是一种一旦创建后其状态就不能被修改的对象。在Java中,不可变对象包括String、基本类型的包装类(如Integer、Double等)等。 不可变对象对写并发有如下帮助: 线程安全:不可变对象是线程安全的,因为它们不会被其他线程修改。因此,多个线程可以
JDK8中新增了红黑树,JDK8是通过数组+链表+红黑树来实现的; JDK7中链表的插入是用的头插法,而JDK8中则改为了尾插法; JDK8中的因为使用了红黑树保证了插入和查询了效率,所以实际上JDK8中的Hash算法实现的复杂度降低了; JDK8中数组扩容的条件也发了变化,只会判断是否当前元素个数
volatile是Java虚拟机提供的轻量级的同步机制,具有以下特点: 保证可见性:volatile保证了多个线程对共享变量的操作是可见的。当一个线程修改了共享变量的值,其他线程会立即看到这个改变。 禁止指令重排:volatile通过禁止指令重排来保证顺序性。在多线程环境下,为了提高程序执行效率,编
可重入锁可以简单理解为一个可以重复获取的锁,就像拿钥匙开锁一样,你可以反复用同一把钥匙开锁。这种锁在同一线程内是安全的,因为它可以被同一线程多次获取,而不会产生不一致的状态。 举个例子,假设有一个线程A在执行一个方法,同时这个方法内部又调用另一个方法,那么线程A可以重复获取同一个锁,而不会出现死锁的