java中死锁的概念是什么给个例子
2021/5/12 12:28:32
本文主要是介绍java中死锁的概念是什么给个例子,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
10.死锁
当两个线程循环依赖于一对同步对象(monitor)时将发生死锁。例如:
一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何 synchronized 方法,同时,反向的情况也发生,就将发生死锁。
死锁很少发生,但一旦发生就很难调试。
在以下例子中:a正在等待b释放,b也正在等待a释放,a怎么才能释放锁呢?只有a往前移动一个语句,执行完disp,a就能自动释放锁,但执行disp需要b释放锁,所以因为执行不了disp,所以a不能释放锁。b也一样,所以大家就在这互相等,从而发生了死锁。
对 于下面的例子1.start()作为一个线程,获得d1的锁。为什么?因为synchronized public void run().所以run()的synchronized不能去掉。d2.start()作为一个线程获得d2的锁。没有问题,所以打印出来两个“in ru”。然后,在d1's run()的 d.disp()使得d1试图从d2获得一个锁,因为在这一刻,d.disp()意味着d1.d.disp()= d2.disp(),意味着d1试图得到一个锁从d2,反之亦然。
如果任何synchronized 删除,不会发生死锁,但安全性降低。
例1.10.1
class DeadLockExam extends Thread {
DeadLockExam d;
synchronized void disp() {
System.out.println("in di");
}
synchronized public void run() {
System.out.println("in ru");
try {
Thread.sleep(1000);
} catch (Exception e) {
}
d.disp();
}
}
更多内容请见原文,文章转载自:https://blog.csdn.net/qq_44639795/article/details/103095424
这篇关于java中死锁的概念是什么给个例子的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?