Sobes.tech
Junior — Middle

Можеш ли да дадеш пример за ситуация в Java, когато се използва песимистично блокиране за предотвратяване на конфликти при достъп до данни?

sobes.tech AI

Отговор от AI

Песимистичното блокиране в Java често се използва, когато трябва да се гарантира, че данните няма да бъдат променени от други нишки по време на изпълнение на критична операция. Например, при работа с база данни чрез JPA/Hibernate, може да се използва методът lock() с типа блокиране PESSIMISTIC_WRITE, за да се предотврати едновременната промяна на една и съща запис:

EntityManager em = ...;
EntityTransaction tx = em.getTransaction();
tx.begin();

// Получаване на обект с блокировка за писане
MyEntity entity = em.find(MyEntity.class, id, LockModeType.PESSIMISTIC_WRITE);

// Извършване на промени
entity.setValue(newValue);

// Запазване на промените
em.persist(entity);
tx.commit();

В този пример, докато транзакцията не приключи, други транзакции, които се опитват да получат блокировка върху същия запис, ще чакат, което предотвратява конфликти и осигурява цялостта на данните.