- 博客(6)
- 收藏
- 关注
原创 双重检查锁定与延迟初始化
双重检查锁定的由来 问题的根源 基于volatile的解决 基于类初始化的解决方案 类或接口初始化的五个阶段 第一阶段 第二阶段 第三阶段 第四阶段 小结 在Java多线程程序当中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销.双检查锁定是常见的延迟初始化结束,但他是一个错误的用法. 双重检查锁定的由来 在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并...
2019-09-06 19:15:26 205
原创 happens-before规则
happens-before是JMM最核心的概念。 JMM的设计 从JMM设计者的角度,在设计JMM时,需要考虑两个关键因素 程序员对内存模型的使用.程序员希望内存模型易于理解,易于编程.程序员希望基于一个强内存模型来编写代码. 编译器和处理器对内存模型的实现.编译器和处理器希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化来提高性能.编译器和处理器就希望实现一个弱内存模型. 由...
2019-09-06 17:33:12 246
原创 volatile的内存语义
volatile的内存语义 volatile的特性 volatile写-读建立的happens-before关系 volatile写-读的内存语义 volatile的写内存语义 volatile读的内存语义 volatile内存语义的实现 volatile的内存语义 volatile的特性 理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个...
2019-09-03 08:37:20 217 1
原创 锁的内存语义
锁的内存语义 锁的释放-获取建立的happens-before关系 锁是Java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送信息. 假设线程A执行writer()方法,随后线程B执行reader()方法.根据happens-before规则,这个过程happens-before关系可以分为3类. 根据程序次序规则,1 happens-bef...
2019-09-03 08:34:42 159
原创 redis从海量的key里面查询出某一固定前缀的key
生成海量数据 1.Linux Bash下面执行(一定要是Bash) for((i=1;i<=20000000;i++)); do echo "set k$i v$i" >> /tmp/redisTest.txt ;done; 生成2千万条redis批量设置kv的语句(key=kn,value=vn)写入到/tmp目录下的redisTest.txt文件中 2.用vim去掉行尾...
2019-08-29 21:37:39 5308 3
原创 Redis的数据类型即应用场景
String(最基本的数据类型,二进制安全) String是二进制安全的,也就是说redis的String可以包含任何数据类型,比如说JPG图像或者是序列化对象.String类型能存储的最大值是512MB. String就像是Java中的Map一样,一个Key对应一个Value 基本用法: 127.0.0.1:6380> set hello world OK 127.0.0.1:6380&g...
2019-08-29 21:37:00 98
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人