java – 锁定类的静态成员
|
根据我的理解,下面的代码应该导致死锁.
但是,程序运行正常并打印***成功获得了两个锁 锁定静态对象的原因是什么? public class Deadlock {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadlockRunnable());
t1.start();
}
}
class DeadlockRunnable implements Runnable {
static Object firstData = new Object();
static Object secondData = new Object();
public void run() {
synchronized(firstData) {
synchronized(secondData) {
System.out.println("*** Successfully acquired both the locks");
}
}
}
}
对于那些回答锁是对象而不是课堂的人,请看一下this 解决方法首先,你有一个错误:
锁定静态对象仅锁定该对象,而不是类.您正在锁定两个单独的对象. question you refered to大约是synchronized methods而不是synchronized statements.这两个相关结构的工作方式略有不同. 其次,即使您锁定了同一个对象,您的代码仍然不会死锁(ideone).内在锁是可重入的.这意味着如果线程尝试两次使用相同的锁,则线程不会自行死锁.
Source (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 45000 ms后无法在端口7055上连接到主机1
- Java实现字符串反转的8种9种方法
- java – Mysql jconnector在com.myql.jdbc.utils
- java – MessageConsumer / MessageProducer vs
- 访问不带java:comp / env前缀的JNDI DataSource
- java – Servlet转发响应调用者/上一页
- java – 如何清除不适合MySQL中utf8编码的坏字符
- java – 使用xmlelement defaultvalue注释指定默
- java – 如何计算arraylist中特定类的实例数?
- Java泛型:接收实现类的类型参数的接口方法
