Önemli sınıflar şöyle
1. HazelcastLockProvider
2. HazelcastLock
HazelcastLockProvider Sınıfı
lock metodu
Kod şöyle
public Optional<SimpleLock> lock(@NonNull LockConfiguration lockConfiguration) {final Instant now = ClockProvider.now();final String lockName = lockConfiguration.getName();final IMap<String, HazelcastLock> store = getStore();try {// lock the map key entrystore.lock(lockName, keyLockTime(lockConfiguration), TimeUnit.MILLISECONDS);// just one thread at a time, in the cluster, can run this code// each thread waits until the lock to be unlockif (tryLock(lockConfiguration, now)) {return Optional.of(new HazelcastSimpleLock(this, lockConfiguration));}} finally {// released the map lock for the others threadsstore.unlock(lockName);}return Optional.empty();}
- shedlock_storage isimli IMap veri yapısında HazelcastLock nesneleri saklanır.
- eyLockTime() metodu now + LockAtMostUntil değerini verir. Yani IMap.lock() çağrısı gelecekteki bir zaman kadar bu key değerini kilitler
- tryLock() metodu kilitli olan key değerinde
- HazelcastLock nesnesi yoksa yeni bir tane ekler ve true döner
- HazelcastLock nesnesi varsa ve bayatlamışsa, yeni HazelcastLock ile değiştirir ve true döner
- HazelcastLock nesnesi varsa ve bayatlamamışsa, kilitleyemediği için false döner
Hiç yorum yok:
Yorum Gönder