`
zhouchaofei2010
  • 浏览: 1104199 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java并发编程实战-第10章-避免活跃性危险

 
阅读更多

第三部分 活跃性、性能和测试

 

java并发编程实战-第10章-避免活跃性危险

 

10.1.1 锁顺序死锁

        GUI为什么设计成单线程的原因

10.1.2 动态的锁顺序死锁

       转账时,对于参数账户a和b,如果设计成a转移b时先设定先锁定a再锁定b,则b转给a时就会先锁定b

 

再锁定a,造成锁顺序死锁

       

       此时可以通过取a和b的hash值,来确定锁定顺序的规则,如果有主键的话,则直接通过主键来确定

 

锁定规则,而不用判断hash值是否相同的情况

       

10.1.3 在协作对象发生死锁

 

      如果在类A 的方法a1 中调用类B的方法b2, 在B中方法b2调用类A的方法a2 。如果方法都是同步的,

 

则会造成死锁。类A方法先获得类A对象的锁然后试图获得类B的锁,而此时类B的方法b2已经获得类B对象的

 

锁试图去获得类A对象的锁  

      

10.1.4  开发调用

 

        开发调用方法,在方法中用同步代码块, 更容易进行死锁分析。有时候会造成原子性的问题,但

 

许多情况下,是某个操作失去原子性是可以接受的。比如更新出租车位置以及通知出租车车队

        

        

        

10.1.5 资源死锁

      假如一个任需要连接两个资源池中D1,D2,任务a 和任务b 获取D1和D2 的顺序可能是相反的

      

      线程饥饿死锁,如果某些任务需要等待另外一些任务的结果

      

10.2 死锁的避免和诊断

     两阶段分析:1找出什么地方需要获得多个锁2对这些实例进行全局分析,确保获取锁的顺序一致

     

10.2.1 支持定时的锁

 

       Lock类中的tryLock 可以设定锁的时间(不过只有在两个锁的时间有效,如果嵌套很多锁的时候,

 

也无法释放)

       

       Lock后续学习,暂时不理解

       (后续学)

       

10.2.2 通过线程转储信息来分析死锁 

         Thread Dump

         (后续学)

         

10.3 其他活跃性危险

包括饥饿、丢失信号和活锁等(“丢失信号” 14.2.3节中介绍)

 

10.3.1 饥饿

最常见的资源cpu时钟周期,优先级使用不当,不造成

 

避免使用线程优先级,调整了优先级,将造成程序运行与平台相关。

 

10.3.2 糟糕的响应性

  后台cpu密集型任务会造成前端响应时间,这时候发挥线程优先级。降低其优先级

  不良的锁

10.3.3 活锁

   线程不断重复执行相同的操作,而且总是失败

   

小结:

设计时应该避免顺序死锁,最好的方法是程序中始终使用开发调用

 

 

分享到:
评论

相关推荐

    Java并发编程实战

    第10章 避免活跃性危险 第11章 性能与可伸缩性 第12章 并发程序的测试 第四部分 高级主题 第13章 显式锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java内存模型 附录A 并发性...

    Java并发编程实战2019.zip

    Java并发编程实战,第1章 简介,第...第10章 避免活跃性危险 第11章 性能与可伸缩性 第12章 并发程序的测试 第13章 显式锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java内存模型

    Java 并发编程实战

    第10章 避免活跃性危险 第11章 性能与可伸缩性 第12章 并发程序的测试 第四部分 高级主题 第13章 显式锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java内存模型 附录A 并发性...

    Java并发编程实践 PDF 高清版

    第10章 避免活跃度危险 第11章 性能和可伸缩性 第12章 测试并发程序 第4部分 高级主题 第13章 显示锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java存储模型 附录A 同步Annotation 参考...

    Java专业人士必备的书籍和网站列表:

    2. **《Java并发编程实战》** - Brian Goetz等著。并发编程是现代Java应用的核心,这本书详细介绍了Java并发模型,以及如何编写安全、高效的多线程代码。 3. **《Java核心技术卷I & II》** - Cay S. Horstmann等著。...

    Netty实战 电子版.pdf_java_netty_服务器_

    10. **社区活跃**:Netty有活跃的社区支持,持续更新和维护,保证了框架的稳定性和先进性。 通过学习《Netty实战》,开发者可以掌握如何使用Netty搭建高性能的TCP、UDP服务器,如何处理HTTP请求,以及如何实现...

    Tapestry开发

    1. **组件化编程:**Tapestry的核心思想之一就是组件化编程,这意味着开发者可以将Web页面分解为多个可复用的组件,每个组件都可以独立开发和维护。 2. **自动表单处理:**Tapestry框架提供了自动表单处理功能,可以...

    Programming+In+Scala+v3

    - Actor模型:Scala通过Actor模型支持并发编程,Actor是独立执行的任务单元。 - 并发控制:Scala提供了丰富的工具和库来支持并发和并行编程,例如Future和Promise等。 7. **高级特性**: - 宏与元编程:Scala...

    Netty权威指南 第2版 PDF电子书下载 带书签目录1

    5. **心跳与空闲检测机制**:介绍Netty如何通过心跳包和空闲状态检测来保持连接的活跃性,防止网络故障。 6. **安全与SSL/TLS支持**:详细解释如何在Netty中配置和使用SSL/TLS,以确保通信的安全性。 7. **性能...

    Netty权威指南 第2版

    《Netty权威指南 第2版》是一本深入探讨Netty框架的专业书籍,旨在帮助读者全面理解和掌握Netty在开发高性能、高并发网络应用中的实践与技术精髓。Netty是Java领域广泛使用的网络通信库,其高效、灵活和易用的特点使...

Global site tag (gtag.js) - Google Analytics