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();

Σε αυτό το παράδειγμα, όσο η συναλλαγή δεν ολοκληρώνεται, άλλες συναλλαγές που προσπαθούν να αποκτήσουν κλείδωμα στην ίδια εγγραφή θα περιμένουν, αποτρέποντας συγκρούσεις και διασφαλίζοντας την ακεραιότητα των δεδομένων.