Sobes.tech
Junior — Middle

Czy możesz podać przykład sytuacji w Java, w której stosuje się pesymistyczne blokowanie, aby zapobiec konfliktom podczas dostępu do danych?

sobes.tech AI

Odpowiedź od AI

Pesymistyczne blokowanie w Java jest często używane, gdy trzeba zagwarantować, że dane nie będą zmieniane przez inne wątki podczas wykonywania krytycznej operacji. Na przykład, pracując z bazą danych przez JPA/Hibernate, można użyć metody lock() z typem blokady PESSIMISTIC_WRITE, aby zapobiec jednoczesnym zmianom tego samego rekordu:

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

// Uzyskanie obiektu z blokadą zapisu
MyEntity entity = em.find(MyEntity.class, id, LockModeType.PESSIMISTIC_WRITE);

// Wprowadzenie zmian
entity.setValue(newValue);

// Zapisanie zmian
em.persist(entity);
tx.commit();

W tym przykładzie, dopóki transakcja nie zostanie zakończona, inne transakcje próbujące uzyskać blokadę na ten sam rekord będą czekać, co zapobiega konfliktom i zapewnia integralność danych.