一江溪水
09
22
AQS原理 AQS原理
概念AQS是AbstarctQueuedSynchronizer 的简称 ,是一个用于构建锁和同步容器的框架。 juc并发 包内许多类都是基于 AQS 构建的 ReentrantLock ReentrantReadWriteLock Fu
2021-09-22
21
比较交换CAS 比较交换CAS
概念CAS 是比较交换 CompareAndSwap 的简称,是一种用于在多线程环境下实现同步功能的机制。 顾名思义就是比较并交换。简单来说,从某一内存上取值 V,和预期值 A 进行比较 如果内存值 V 和预期值 A 的结果相等,那么我们
2021-09-21
20
如何保证消息的可靠性传输 如何保证消息的可靠性传输
在生产环境中,因为机器以及网络设备的不可靠,保证消息的可靠是待解决的问题。在特定场景下消息可能存在丢失风险 消息发送流程我们可以将 RabbitMQ 消息处理的过程分为三个步骤: 生产阶段:生产者生产消息并且发送到消息队列; 储存阶段:消
2021-09-20
19
volatile 关键字 volatile 关键字
volatile 关键字 volatile 关键字解决内存可见性问题,是一种弱形式的同步。 该关键字可以确保当一个线程更新共享变量时,更新操作对其他线程马上可见。 当一个变量被声明为 volatile 时,线程在写入变量时不会把值缓存在寄存
2021-09-19
19
JDK的锁优化策略 JDK的锁优化策略
锁的优化策略 JDK6对synchronized做了很多优化,引入了自适应自旋、锁消除、锁粗化、偏向锁和轻量级锁等优化策略,提高锁的效率; 锁一共有4个状态,级别从低到高依次是:无锁、偏向锁、轻量级锁和重量级锁,状态会随竞争情况升级。 锁可
2021-09-19
17
synchronized关键字 synchronized关键字
概念synchronized 同步块是 Java 提供的一种原子性内置锁,Java 中的每个对象都可以把它当作一个同步锁来使用,这些 Java 内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。 内置锁 也叫排它锁,也就是当一个线程获取这
2021-09-17
15
扩展线程池捕获线程异常 扩展线程池捕获线程异常
如何捕获线程池中的线程异常简单案例我们先看一个案例,实现Runnable接口,计算两个数的商创建一个线程池,参数如下提交任务到线程池,查看执行结果执行结果 我们发现,我们代码中,提交了5个线程,但最终只打印了4个结果, 而且没有报何错误,
2021-09-15
15
ThreadLocal的使用 ThreadLocal的使用
概述ThreadLocal 为解决多线程程序的并发问题提供了一种新的思路,使用这个工具类可以很简洁地编写出优美的多线程程序。 ThreadLocal 很容易让人望文生义,想当然地认为是一个 “本地线程”。其实,ThreadLocal 并不
2021-09-15
12
HashMap的扩容 HashMap的扩容
HashMap初始化在JDK1.8中,定义了HashMap的初始化过程,我们看看他的源码是如果定义这个初始化过程可以看到,它的构造方法中传入了两个参数,一个是初始化容量,一个是加载因子,默认是0.75f HashMap(int initia
2021-09-12
05
MySQL索引(二) MySQL索引(二)
MySQL索引(二)自适应哈希索引 自适应哈希索引是InnoDB引擎的一个特殊功能,当它注意到某些索引值被使用的非常频繁时,会在内存中基于B-Tree索引之上再创键一个哈希索引,这样就让B-Tree索引也具有哈希索引的一些优点,比如快速哈希
2021-09-05
05
04
MySQL索引(一) MySQL索引(一)
MySQL索引索引是什么索引是数据库中用来提高性能的常用工具,索引在 MySQL 中也叫“键(Key)”,是存储引擎用于快速查找记录的一种数据结构,这也是索引的基本功能。 索引对于良好的性能很关键,尤其是当表中数据量越来越大时,索引对性能
2021-09-04