Блокировка потока в приложении Java EE - PullRequest
0 голосов
/ 25 сентября 2010

Я новичок в Java EE.Интересно, существуют ли некоторые общие случаи взаимоблокировки на уровне приложений Java EE, возникающие в результате использования ключевого слова синхронизированного примитива Java.Если да, могли бы помочь привести пример?

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Из спецификации EJB 3.1, глава 21.2.2.Ограничения программирования:

Корпоративный бин не должен использовать примитивы синхронизации потоков для синхронизации выполнения нескольких экземпляров, за исключением случаев, когда это сессионный бин Singleton с параллельным управлением, управляемым бином.* И рассуждения также интересны:

Синхронизация не будет работать, если контейнер EJB распределит экземпляры корпоративного компонента по нескольким JVM.

0 голосов
/ 25 сентября 2010
public void myMethod1() throws Exception {
    synchronized (MyClass.class) {

        Thread.sleep(10*1000);

        synchronized (MyClass2.class) {
        }
    }
}

public void myMethod2() throws Exception {    
    synchronized (MyClass2.class) {

        Thread.sleep(10*1000);

        synchronized (MyClass1.class) {
        }

    }
}

Звоните myMethod1 из одного потока и myMethod2 из другого потока, и вы получите тупик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...