Zacząłem czytać o komponencie bean sesji singleton i adnotacjach używanych do zarządzania współbieżnością zarządzaną kontenerami. Nie widzę tego w tym porównaniu w porównaniu do zwykłego słowa kluczowego "zsynchronizowanego", więc podejrzewam, że brakuje czegoś ważnego. Rozważmy następujący przykład z książki „Enterprise JavaBeans 3.1” przez Rubinger & Burke, O'Reilly:EJB 3.1 współbieżność zarządzana kontenerami kontra synchronizacja
@javax.ejb.Lock(javax.ejb.LockType.READ)
public String concurrentReadOnlyMethod(){...}
@javax.ejb.Lock(javax.ejb.LockType.WRITE)
public void allowOnlyOneWriteAtATimeMethod(String stringToSet){...}
Jak to jest lepiej niż pomijając adnotacji wszystkich toghether w przypadku odczytu i za pomocą słowa kluczowego synchronized
w przypadku odpisów , tak:
public String concurrentReadOnlyMethod(){...}
public synchronized void allowOnlyOneWriteAtATimeMethod(String stringToSet){...}
Jeśli dobrze cię rozumiem, mogę to nieformalnie sformułować w następujący sposób: Biorąc pod uwagę jedną klasę zawierającą obie powyższe metody, w przypadku współbieżności zarządzanej przez kontenera semantyka to "równoczesne odczyty są dozwolone, dopóki nie trwa pisanie". Semantyka przeciwstawnego przykładu będzie następująca: "dozwolone są równoczesne odczyty, także podczas pisania trwa, ale tylko jeden wątek będzie pisać na raz". –
Tak, to podsumowuje to całkiem dobrze. –
Czy możesz mi podać odniesienie do tej semantyki blokady READ/WRITE w EJB 3.1? Nie mogłem go znaleźć nawet w specyfikacji. – illEatYourPuppies