我是一个新手的Java EE。 不知是否有一些共同的死锁情况下在Java EE应用程序层,使用Java同步原语得到的 - 同步关键字。 如果是的话,可以帮助举个例子?
Answer 1:
从EJB 3.1规范,21.2.2章节。 编程限制:
一个enterprise bean不能使用线程同步原语,除非它是一个Singleton会话Bean与Bean管理的并发,同步多个实例的执行。
和推理也很有意思:
同步是行不通的,如果EJB容器分布式企业bean的跨多个JVM实例。
Answer 2:
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
从其他线程,你会得到一个僵局。
文章来源: Thread deadlock in Java EE application