课程咨询 :18487146383

长沙Java培训 > 达内新闻 > 达内长沙java培训详解:活跃度(Liveness)
  • 达内长沙java培训详解:活跃度(Liveness)

    发布:长沙Java培训      来源:码农网      时间:2016-09-21

  • 一个并行应用程序的及时执行能力被称为它的活跃度(liveness)。达内长沙java培训将介绍最常见的一种活跃度的问题——死锁,以及另外两个活跃度的问题——饥饿和活锁。

    死锁(Deadlock)

    死锁是指两个或两个以上的线程永远被阻塞,一直等待对方的资源。

    下面达内长沙java培训举例说明:

    Alphonse和Gaston是朋友,都很有礼貌。礼貌的一个严格的规则是,当你给一个朋友鞠躬时,你必须保持鞠躬,直到你的朋友鞠躬回给你。不幸的是,这条规则有个缺陷,那就是如果两个朋友同一时间向对方鞠躬,那就永远不会完了。

    当他们尝试调用bowBack两个线程将被阻塞。无论是哪个线程永远不会结束,因为每个线程都在等待对方鞠躬。这就是死锁了。

    饥饿和活锁(Starvation and Livelock)

    饥饿和活锁虽比死锁问题稍微不常见点,但这些是在并发软件种每一个设计师仍然可能会遇到的问题。

    饥饿(Starvation)

    饥饿描述了这样一个情况,一个线程不能获得定期访问共享资源,于是无法继续执行。这种情况一般出现在共享资源被某些“贪婪”线程占用,而导致资源长时间不被其他线程可用。例如,假设一个对象提供一个同步的方法,往往需要很长时间返回。如果一个线程频繁调用该方法,其他线程若也需要频繁的同步访问同一个对象通常会被阻塞。

    活锁(Livelock)

    一个线程常常处于响应另一个线程的动作,如果其他线程也常常处于该线程的动作,那么就可能出现活锁。与死锁、活锁的线程一样,程序无法进一步执行。然而,线程是不会阻塞的,他们只是会忙于应对彼此的恢复工作。现实中的例子是,两人面对面试图通过一条走廊: Alphonse移动到他的左则让路给Gaston ,而Gaston移动到他的右侧想让Alphonse过去,两个人同时让路,但其实两人都挡住了对方没办法过去,他们仍然彼此阻塞。

上一篇:达内长沙java培训详解:Guarded Blocks

下一篇:达内长沙java培训详解:进程和线程

最新开班日期  |  更多

Java--大数据业余制班

Java--大数据业余制班

开班日期:4月28日

Java--大数据全日制班

Java--大数据全日制班

开班日期:4月28日

Java--零基础业余班

Java--零基础业余班

开班日期:4月28日

Java--零基础全日制班

Java--零基础全日制班

开班日期:4月28日

  • 网址:http://cs.java.tedu.cn     地址:长沙市开福区芙蓉中路一段 476 号建鸿达现代城 9 楼
  • 课程培训电话:18487146383     全国服务监督电话:400-111-8989
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56