搜索
接上篇秒杀系统优化方案(上)吐血整理3深入优化设计31初始方案问题分析在前面针对数据库的优化中,由于数据库行级锁存在竞争造成大量的串行阻塞,我们使用了存储过程(或者触发器)等技术绑定操作,整个事务在M
2022-11-26
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。消息被处理的过程相当于流程A被处理。我们这里以一个实际
2022-11-26
什么是扩容,什么时候要扩容?了解Java内存结构的伙伴应该都知道,每个线程都有自己的工作内存,占用内存大小取决于工作内存里变量的多少与大小,单个线程占用内存通常不会很大,但是随着并发的线程不断的增加,
2022-11-26
上一篇,我们谈了谈如何通过同步来保证共享变量的原子性(一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行),本篇我们来谈一谈如何保证共享变量的可见性(多个线程访问同一个变
2022-11-20
threadJoin把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。tjoin();/
2022-11-10
在Java并发编程的世界里,synchronized和Lock是控制多线程并发环境下对共享资源同步访问的两大手段。其中Lock是JDK层面的锁机制,是轻量级锁,底层使用大量的自旋+CAS操作实现的。学
2022-11-06
目录简介Semaphored的使用构造方法核心方法示例使用Semaphore实现互斥简介Semaphore是用来限制访问特定资源的并发线程的数量,相对于内置锁synchronized和重入锁Reent
2022-11-06
问题描述问题1线上日志打印过多导致的业务线程阻塞异步日志打印在ringbuffer满了之后27版本的log4j2会默认使用当前线程进行打印日志。即使不使用默认的策略29之后已经改为默认的为enqueu
2022-11-05
大家好,我是陶朱公Boy,又跟大家见面了。前言今天跟大家分享一款基于“生产者消费者模式”下实现的组件。该组件是作者偶然在翻阅公司一中间件源码的时候碰到的,觉得设计的非常精美、巧妙,花了点时间整理成文分
2022-10-30
摘要:一起来聊聊这个在高并发环境下比ReadWriteLock更快的锁——StampedLock。本文分享自华为云社区《【高并发】一文彻底理解并发编程中非常重要的票据锁——StampedLock》,作
2022-10-13
大家好,我是陶朱公Boy。今天跟大家分享一个并发编程领域中的一个知识点——同步工具类。我将结合一个真实线上案例作为背景来展开讲解这一知识点。给大家讲清楚什么是同步工具类、适合的场景、解决了什么问题、各
2022-10-12
JMM是什么?Java虚拟机规范中定义了Java内存模型(JavaMemoryModel,JMM)用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。J
2022-10-07
什么是读写锁?在没有写操作的时候,多个线程同时读一个资源没有任何问题,允许多个线程同时读取共享资源(读读可以并发)。如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写操作了(读写,
2022-10-07
volatile的特性可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。原子性:对任意单个volatile变量的读/写具有原子性,但类似于volati
2022-10-07
BlockingQueue是什么BlockingQueue继承了Queue接口,是队列的一种。阻塞队列(BlockingQueue)是一个在队列基础上又支持了两个附加操作的队列,常用解耦。支持阻塞的插
2022-10-07
CyclicBarrier是什么字面意思回环栅栏。直接翻译是循环屏障。通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarr
2022-10-07
CPU高速缓存CPU缓存即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚
2022-10-07
ArrayBlockingQueue是什么ArrayBlockingQueue是最典型的有界阻塞队列。内部使用数组存储元素!初始化时需要指定容量大小。利用ReentrantLock实现线程安全!Arr
2022-10-07
什么是CountDownLatchCountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化
2022-10-07
为什么要使用线程池?我们先看下面俩个程序的执行结果(太简单了,一看就懂的,不提供源码了,直接截图了):产生一个问题:为什么使用线程池会变的这么快呢?线程复用(第一种使用线程的方式,他创建了100001
2022-10-07