命名锁
命名锁本质上是分配给某个给定(不透明)ID 的锁。如果您使用多个资源,每个资源都可以分配唯一 ID(即,具有绝对路径的文件,一些具有唯一 ID 的实体),那么您可以使用命名锁来确保它们受到保护免受并发读写操作的影响。
命名锁为实现提供支持类,并提供开箱即用的七个命名锁实现和三个名称映射器。
开箱即用的“本地”(JVM 本地)命名锁实现如下:
- rwlock-local在使用 JVM java.util.concurrent.locks.ReentrantReadWriteLock的org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory中实现。
- semaphore-local在使用 JVM java.util.concurrent.Semaphore的org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory中实现。
- 在使用 JVM java.nio.channels.FileLock的org.eclipse.aether.named.providers.FileLockNamedLockFactory中实现的文件锁。
- noop在org.eclipse.aether.named.providers.NoopNamedLockFactory中实现,不使用锁定。
开箱即用的“分布式”命名锁实现如下(需要额外依赖的独立模块):
- rwlock-redisson在org.eclipse.aether.named.redisson.RedissonReadWriteLockNamedLockFactory中实现。
- semaphore-redisson在org.eclipse.aether.named.redisson.RedissonSemaphoreNamedLockFactory中实现。
- semaphore-hazelcast-client在org.eclipse.aether.named.hazelcast.HazelcastClientCPSemaphoreNamedLockFactory中实现。
- semaphore-hazelcast在org.eclipse.aether.named.hazelcast.HazelcastCPSemaphoreNamedLockFactory中实现。
本地命名锁仅适用于具有多线程构建的 JVM。在多个 Maven 进程之间(即在繁忙的 CI 服务器上)共享本地存储库需要分布式命名锁!
上述(不透明)ID 需要从工件和元数据映射。
开箱即用的名称映射器实现如下:
- 在org.eclipse.aether.internal.impl.synccontext.named.StaticNameMapper中实现的静态。
- gav在org.eclipse.aether.internal.impl.synccontext.named.GAVNameMapper中实现。
- 区分在org.eclipse.aether.internal.impl.synccontext.named.DiscriminatingNameMapper中实现。
- file-gav在org.eclipse.aether.internal.impl.synccontext.named.FileGAVNameMapper中实现。