商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文


    五. 死锁的经验法则
    笔者在开发中总结以下死锁问题的经验。
    (1) 对大多数的Java程序员来说最简单的防止死锁的方法是对竞争的资源引入序号,如果一个线程需要几个资源,那么它必须先得到小序号的资源,再申请大序号的资源。可以在Java代码中增加同步关键字的使用,这样可以减少死锁,但这样做也会影响性能。如果负载过重,数据库内部也有可能发生死锁。

    (2)了解数据库锁的发生行为。假定任何数据库访问都有可能陷入数据库死锁状况,但是都能正确进行重试。例如了解如何从应用服务器获取完整的线程转储以及从数据库获取数据库连接列表(包括互相阻塞的连接),知道每个数据库连接与哪个Java线程相关联。了解Java线程和数据库连接之间映射的最简单方法是向连接池访问模式添加日志记录功能。

    (3)当进行嵌套的调用时,了解哪些调用使用了与其它调用同样的数据库连接。即使嵌套调用运行在同一个全局事务中,它仍将使用不同的数据库连接,而不会导致嵌套死锁。

    (4)确保在峰值并发时有足够大的资源池。

    (5)避免执行数据库调用或在占有Java虚拟机锁时,执行其他与Java虚拟机无关的操作。
 
    最重要的是,多线程设计虽然是困难的,但在开始编程之前详细设计系统能够帮助你避免难以发现死锁的问题。死锁在语言层面上不能解决,就需要一个良好设计来避免死锁。
1 2 3 4 5
【内容导航】
第1页: 什么是线程 第2页: 上锁
第3页: 如何检测死锁的根源 第4页: 资源池耗尽死锁
第5页: 死锁的经验法则
©版权所有。未经许可,不得转载。
[责任编辑:赵恒]