Контейнер EJB 3.1, управляемый по сравнению с синхронизированным - PullRequest
9 голосов
/ 24 августа 2011

Я начал читать об одноэлементном сессионном компоненте и аннотациях, используемых для управления параллельным управлением контейнером. Я не вижу смысла в этом по сравнению с простым использованием ключевого слова «synchronized», поэтому я подозреваю, что есть кое-что важное, что я упускаю. Рассмотрим этот пример из книги " Enterprise JavaBeans 3.1 " Рубингера и Бёрка, О'Рейли:

@javax.ejb.Lock(javax.ejb.LockType.READ)
public String concurrentReadOnlyMethod(){...}

@javax.ejb.Lock(javax.ejb.LockType.WRITE)
public void allowOnlyOneWriteAtATimeMethod(String stringToSet){...}

Как это лучше, чем опускать аннотацию вместе в случае чтения и использовать ключевое слово synchronized в случае записи, например:

public String concurrentReadOnlyMethod(){...}

public synchronized void allowOnlyOneWriteAtATimeMethod(String stringToSet){...}

Ответы [ 2 ]

4 голосов
/ 24 августа 2011

Простой.

«concurrentReadOnlyMethod» вообще не синхронизируется, поэтому он не получает другого побочного эффекта синхронизации (например, воздействия на переменные в модели памяти).Кроме того, блокировка READ блокирует блокировку WRITE, поэтому при только что синхронизированной работе два метода могут запускать оба потока одновременно, тогда как при блокировке READ / WRITE вы этого не сделаете.

Очевидно, что при большем количествеимеет несколько блокировок READ и несколько блокировок WRITE, так как все блокировки READ могут совместно использоваться и выполняться одновременно, в то время как блокировки WRITE действуют больше как обычные синхронизированные.

2 голосов
/ 25 августа 2011

Ну, как уже упоминал Уилл, с synchronized вы не можете на самом деле копировать поведение javax.ejb.Lock аннотаций, но вы можете сделать это, используя ReadWriteLock блокировки, но это больше работы в конце.

В качестве примечания: поскольку экземпляры синглтона не являются общими для нескольких JVM (то есть они не являются распределенными объектами), на самом деле нет других преимуществ, которые я могу себе представить, что Lock обеспечивает в стороне простоту использования и выхода из опора ящика.

Обратите также внимание на то, что «Если эта аннотация не используется, предполагается значение Lock (WRITE)», поэтому вы также не можете избавиться от него.

...