一个多线程死锁案例,如何避免及解决死锁问题?
2018-01-26 09:55
288 查看
一个多线程死锁案例,如何避免及解决死锁问题?
多线程死锁在java程序员笔试的时候时有遇见,死锁概念在之前的文章有介绍,大家应该也都明白它的概念,不清楚的去翻看历史文章吧。
下面是一个多线程死锁的例子
输出
thread1 get lock1
thread2 get lock2
两个线程相互得到锁1,锁2,然后线程1等待线程2释放锁2,线程2等待线程1释放锁1,两者各不相互,这样形成死锁。
那么如何避免和解决死锁问题呢?
1、按顺序加锁
上个例子线程间加锁的顺序各不一致,导致死锁,如果每个线程都按同一个的加锁顺序这样就不会出现死锁。
2、获取锁时限
每个获取锁的时候加上个时限,如果超过某个时间就放弃获取锁之类的。
3、死锁检测
按线程间获取锁的关系检测线程间是否发生死锁,如果发生死锁就执行一定的策略,如终断线程或回滚操作等。
相关文章推荐
- 如何解决多线程程序中的死锁问题
- 如何解决多线程程序中的死锁问题(转)
- 如何解决多线程并发访问一个资源的安全性问题?
- 如何解决多线程程序中的死锁问题
- php如何解决多线程同时读写一个文件的问题
- 如何解决oracle死锁问题
- 向同一个servlet发多个不同请求,如何解决同步问题?
- 如何把一个文本列表添加到 TListBox 并避免重复项 - 回复 "xnlxw" 的问题
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题
- 事务死锁的问题如何解决?
- 近期的一些学习--当一个程序开发到了中期,突然出现性能问题,如何解决
- 如何解决eclipse subversion的一个问题-看不见别人提交的文件
- 如何在应用程序中避免死锁问题?
- DBA案例分析:如何解决CPU占用100%的问题
- ASP.Net下如何解决关于Access数据库“操作必须使用一个可更新的查询”问题
- 如何解决 html 中多空格字符被当作一个空格字符处理的问题
- 如何解决一个小问题:当前不会命中断点
- 终于解决了一个问题--如何在数据绑定时不让combox控件触发SelectedIndexChanged事件
- 编写多线程的 Java 应用程序 如何避免当前编程中最常见的问题
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题