Locks

Enforce mutual exclusion on cached objects.

❗️

This is a legacy Apache Ignite documentation

The new documentation is hosted here: https://ignite.apache.org/docs/latest/

Cache transactions will acquire locks implicitly. However, there are cases when explicit locks are more useful. The lock() method of the IgniteCache API returns an instance of java.util.concurrent.locks.Lock that lets you define explicit distributed locks for any given key. Locks can also be acquired on a collection of objects using the IgniteCache.lockAll() method.

IgniteCache<String, Integer> cache = ignite.cache("myCache");

// Create a lock for the given key
Lock lock = cache.lock("keyLock");
try {
    // Acquire the lock
    lock.lock();
  
    cache.put("Hello", 11);
    cache.put("World", 22);
}
finally {
    // Release the lock
    lock.unlock();
}

📘

Atomicity Mode

In Ignite, locks are supported only for TRANSACTIONAL atomicity mode, which can be configured via the atomicityMode property of CacheConfiguration.

Locks and Transactions

Explicit locks are not transactional and cannot not be used from within transactions (exception will be thrown). If you do need explicit locking within transactions, then you should use TransactionConcurrency.PESSIMISTIC concurrency control for transactions which will acquire explicit locks for relevant cache operations.