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.