千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:郑州千锋IT培训  >  行业资讯  >  郑州Java学习教程之死锁的检测及预防措施分享

郑州Java学习教程之死锁的检测及预防措施分享

来源:千锋教育
发布人:Yolanda
时间: 2019-05-08 09:30:00

  作为一个合格的程序员,当你发现程序没有响应、CPU占用率又不是特别高的时候,第一反应应该是死锁。何为死锁?当两个或多个线程正在等待彼此释放所需的资源并陷入无限等待时,这种情况称为死锁,它只会发生在多任务或者多线程的情况下。今天千锋小编分享的郑州Java学习教程就给大家讲解一下如何检测Java中的死锁以及怎样预防死锁。

图片1

  如何检测Java中的死锁?

  1)查看代码。看看嵌套的synchronized块是从另一个synchronized块中调用同步方法,还是试图锁定另一个对象。如果是这种情况,那么很有可能出现死锁。

  2)确定死锁风险的另一种方法是在运行应用程序时实际上遇到死锁。如果发生这种情况,可以尝试进行线程转储,在Linux中,可以通过命令“kill -3”执行此操作。这将打印应用程序日志文件中所有线程的状态,可以看到哪个线程锁定在哪个对象上。

图片2

  怎样预防死锁?

  死锁的根本原因:1)是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环;2)默认的锁申请操作是阻塞的。所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对象的类中的所有方法,是否存在着导致锁依赖的环路的可能性。

  1)如何预防死锁尽量保证加锁顺序是一样的。

  例如有A、B、C三把锁。Thread 1的加锁顺序为A、B、C,Thread 2的加锁顺序为A、C,这样就不会死锁。如果Thread2的加锁顺序为B、A或者C、A这样顺序就不一致了,就会出现死锁问题。

  2)尽量用超时放弃机制。

  Lock接口提供了tryLock(long time, TimeUnit unit)方法,该方法可以按照固定时长等待锁,因此线程可以在获取锁超时以后,主动释放之前已经获得的所有的锁。可以避免死锁问题。

  3)避免同步调用其他对象。

  Java是面向对象的编程语言,程序的最小单元是对象,对象封装了数据和操作,所以Java中的锁一般也是以对象为单位的,对象的内置锁保护对象中的数据的并发访问。如果我们能够避免在对象的同步方法中调用其它对象的同步方法,那么就可以避免死锁产生的可能性。

  当然,在实际工作中,有些Java程序员在线程日志里看不到死锁信息,这主要是因为线程都是处在Runable状态。一般这种情况下你需要直接看线程栈的内容,自己分析。

  以上就是郑州Java学习教程中有关死锁的相关内容,如果你想了解更多Java开发知识,可以关注“千锋郑州”微信公众号,还可以来千锋郑州Java培训班试听体验,潮流高端的课程、更多Java学习进阶资料以及丰富的项目实战练习,带给你不一样的学习体验!

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

大数据培训要花多少钱

2023-04-12

计算机前端怎么学

2023-04-12

大数据都需要学什么?难不难

2023-03-30

最新文章NEW

javaee是前端还是后端,都学什么

2023-03-24

it前端是做什么的

2023-03-24

大数据培训要多久?你了解多少

2023-03-09

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>