我是Java EE的新手。我想知道Java EE应用程序层中是否存在一些常见的死锁情况,这是因为使用Java同步原语 - synchronized关键字。如果是,可以帮忙举个例子吗?
答案 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
,你将陷入僵局。