java.lang.Object
org.miaixz.bus.core.lang.thread.lock.SegmentLock<L>
- Type Parameters:
L-
分段锁工具类,支持 Lock、Semaphore 和 ReadWriteLock 的分段实现。
通过将锁分成多个段(segments),不同的操作可以并发使用不同的段,避免所有线程竞争同一把锁。 相等的 key 保证映射到同一段锁(如 key1.equals(key2) 时,get(key1) 和 get(key2) 返回相同对象)。 但不同 key 可能因哈希冲突映射到同一段,段数越少冲突概率越高。
支持两种实现:
- 强引用:创建时初始化所有段,内存占用稳定。
- 弱引用:懒加载,首次使用时创建段,未使用时可被垃圾回收,适合大量段但使用较少的场景。
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription批量获取多个 key 对应的锁段列表,按索引升序排列,避免死锁。static <L> SegmentLock<L> 创建强引用的分段锁,所有段在创建时初始化。abstract L根据 key 获取对应的锁段,保证相同 key 返回相同对象。abstract LgetAt(int index) 根据索引获取锁段,索引范围为 [0, size())。static SegmentLock<Lock> lazyWeakLock(int stripes) 创建弱引用的可重入锁分段实例,懒加载。static SegmentLock<ReadWriteLock> lazyWeakReadWriteLock(int stripes) 创建弱引用的读写锁分段实例,懒加载。static SegmentLock<Semaphore> lazyWeakSemaphore(int stripes, int permits) 创建弱引用的信号量分段实例,懒加载。static SegmentLock<Lock> lock(int stripes) 创建强引用的可重入锁分段实例。static SegmentLock<ReadWriteLock> readWriteLock(int stripes) 创建强引用的读写锁分段实例。static SegmentLock<Semaphore> semaphore(int stripes, int permits) 创建强引用的信号量分段实例。abstract intsize()获取总段数。
-
Constructor Details
-
SegmentLock
public SegmentLock()
-
-
Method Details
-
get
根据 key 获取对应的锁段,保证相同 key 返回相同对象。- Parameters:
key- 非空 key- Returns:
- 对应的锁段
-
getAt
根据索引获取锁段,索引范围为 [0, size())。- Parameters:
index- 索引- Returns:
- 指定索引的锁段
-
size
public abstract int size()获取总段数。- Returns:
- 段数
-
bulkGet
批量获取多个 key 对应的锁段列表,按索引升序排列,避免死锁。- Parameters:
keys- 非空 key 集合- Returns:
- 锁段列表(可能有重复)
-
custom
创建强引用的分段锁,所有段在创建时初始化。- Type Parameters:
L- 锁类型- Parameters:
stripes- 段数supplier- 锁提供者- Returns:
- 分段锁实例
-
lock
创建强引用的可重入锁分段实例。- Parameters:
stripes- 段数- Returns:
- 分段锁实例
-
lazyWeakLock
创建弱引用的可重入锁分段实例,懒加载。- Parameters:
stripes- 段数- Returns:
- 分段锁实例
-
semaphore
创建强引用的信号量分段实例。- Parameters:
stripes- 段数permits- 每个信号量的许可数- Returns:
- 分段信号量实例
-
lazyWeakSemaphore
创建弱引用的信号量分段实例,懒加载。- Parameters:
stripes- 段数permits- 每个信号量的许可数- Returns:
- 分段信号量实例
-
readWriteLock
创建强引用的读写锁分段实例。- Parameters:
stripes- 段数- Returns:
- 分段读写锁实例
-
lazyWeakReadWriteLock
创建弱引用的读写锁分段实例,懒加载。- Parameters:
stripes- 段数- Returns:
- 分段读写锁实例
-