2021年01月13日   技术笔记

ReentrantLock和synchronzied都是互斥锁,即在某一时刻最多只能有一个线程持有锁。互斥锁在保证线程安全的同时,在一定程度上降低了吞吐量,因为这种情况下任何的“读/读”、“读/写”、“写/写”操作都不能同时发生。然而在实际的场景中我们就会遇到这种情况:有些资源并发的访问中,它大部分时间都是执行读操作,写操作比较少,但是读操作并不影响数据的一致性,如果在进行读操作时采用独占的锁机制,这样势必会大大降低吞吐量。所以如果能够做到读写分离,那就非常完美了。

2020年12月07日   技术笔记

锁是用来控制多个线程访问共享资源的方式,一般来说一个锁可以防止多个线程访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁)。在JavaSE5之前,Java使用synchronized关键字实现锁的功能,但是在JavaSE5之后,并发包中提供了Lock接口(及其实现类),用来实现锁的功能。

2020年12月04日   技术笔记

CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数 -- 内存地址V、旧的预期值A、要更新的值B,当且仅当内存地址V值等于旧的预期值A时才会将内存V的值修改为B,否则什么都不干。CAS是整个JUC体系最核心、最基础的理论。

2020年12月03日   技术笔记

volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,在一定情况下可以保证线程间的同步性。本文介绍了volatile的特性、实现机制以及使用场景