Java EE应用程序中的线程死锁

时间:2010-09-25 08:59:16

标签: java multithreading java-ee deadlock

我是Java EE的新手。我想知道Java EE应用程序层中是否存在一些常见的死锁情况,这是因为使用Java同步原语 - synchronized关键字。如果是,可以帮忙举个例子吗?

2 个答案:

答案 0 :(得分:2)

从EJB 3.1规范,第21.2.2节。编程限制:

  

企业bean不能使用线程   同步原语到   同步多个执行   实例,除非它是Singleton   会话bean与bean管理   并发性。

理由也很有趣:

  如果是,

同步将不起作用   EJB容器分布式企业   跨多个JVM的bean实例。

答案 1 :(得分:0)

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,你将陷入僵局。