c3 Threads - Deadlock
来源:互联网 发布:手机限制安装软件 编辑:程序博客网 时间:2024/06/03 20:17
Deadlock
同步导致的另一个问题就是死锁!死锁发生在2个线程都需要同样的资源,但各自拥有一部分子资源的锁,如果谁也不放弃自己持有的锁的话,那2个线程就处于一直等待状态。
比如,Jim和Jerry去图书馆借书A和B完成论文,结果Jim拿到了书A,Jerry拿到了书B,结果谁也不想放弃自己现在有的书,结果2个人的论文都没完成。
更糟糕的是,deadlock会导致不定时的,难以发现的bug。还以上例来说,如果Jim或者Jerry有一个先到,拿到了2本书,论文完成后,还书,然后另一个拿到书完成论文。可是,但2个人同时来借书时就出现问题了!可能99%的情况下,程序都正常执行,只有1%的情况下“无原因”的hang。然而,一个每秒处理成百上千个请求的多线程web服务器,即使一个百万分之一概率的问题也能导致服务器短时间内hang。
避免死锁的最重要的技术就是避免使用synchronization,如果可以使用其他技术达到安全就不使用synchronization,synchronization应该作为最后的实现线程安全的措施。若必须使用synchronization,那要时同步的代码块尽量小,作为锁的对象要是同一个。
通常情况下,你最好是做到仔细考虑你的代码,看是否会造成死锁!如果多个类需要同样的资源集,那就保证他们请求资源的顺序是一样的!比如如果类A和类B需要资源X和Y,那就规定A、B要先请求X,再请求Y,在没有拿到X前不会拿Y,那就不会导致死锁了!
0 0
- c3 Threads - Deadlock
- c3 Threads - Running Threads
- c3 Threads - Synchronization
- c3 Threads - Thread Scheduling
- c3 Threads - Returning Infomation From a Thread
- c3 Threads - Thread Pools and Executors
- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks
- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks
- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
- 解决 APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tas
- c3
- c3
- C3
- Deadlock
- deadlock
- Deadlock
- 进程状态转换
- jboss之设置控制台登录窗口
- 记事本中TAB键替换为空格键的方法
- 数据库中的事务
- 源码下编译 apk 导入三方jar
- c3 Threads - Deadlock
- 串行化
- openssl heartbeed到底是怎么回事?
- 调用Google和百度、雅虎进行站内搜索代码
- 3.迭代器和仿函数
- String与StringBuffer的区别
- jboss之后台管理路径
- 《写给大家看的设计书》读后
- 人工误删除InnoDB ibdata数据文件如何恢复?(没试过)