Java™ 教程(并发活性)

发布时间:2019-11-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java™ 教程(并发活性)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

并发活性

并发应用程序及时执行的能力被称为其活性,本节描述了最常见的活性问题,死锁,并继续简要描述其他两个活性问题,饥饿和活锁。

死锁

死锁描述了两个或多个线程永远被阻塞,等待彼此的情况,这是一个例子。

Alphonse和Gaston是朋友,是礼貌的忠实信徒,礼貌的一个严格规则是,当你向朋友鞠躬时,你必须一直鞠躬,直到你的朋友有机会还礼,不幸的是,这条规则没有考虑到两个朋友可能同时互相鞠躬的可能性,这个示例应用程序Deadlock模拟了这种可能性:

public class Deadlock {     static class Friend {         PRivate final String name;         public Friend(String name) {             this.name = name;         }         public String getName() {             return this.name;         }         public synchronized void bow(Friend bower) {             System.out.format("%s: %s"                 + "  has bowed to me!%n",                  this.name, bower.getName());             bower.bowBack(this);         }         public synchronized void bowBack(Friend bower) {             System.out.format("%s: %s"                 + " has bowed back to me!%n",                 this.name, bower.getName());         }     }      public static void main(String[] args) {         final Friend alphonse =             new Friend("Alphonse");         final Friend gaston =             new Friend("Gaston");         new Thread(new Runnable() {             public void run() { alphonse.bow(gaston); }         }).start();         new Thread(new Runnable() {             public void run() { gaston.bow(alphonse); }         }).start();     } }

Deadlock运行时,两个线程在尝试调用bowBack时极有可能会阻塞,两个阻塞都不会结束,因为每个线程都在等待另一个线程退出bow

饥饿和活锁

饥饿和活锁问题远没有死锁常见,但仍然是每个并发软件设计人员可能遇到的问题。

饥饿

饥饿描述了一种情况,即线程无法获得对共享资的定期访问,并且无法取得进展,当“贪婪”线程使共享资源长时间不可用时会发生这种情况。例如,假设一个对象提供了一个通常需要很长时间才能返回的同步方法,如果一个线程频繁地调用此方法,其他也需要频繁同步访问同一对象的线程将经常被阻塞。

活锁

一个线程经常响应另一个线程的操作,如果另一个线程的操作也是对另一个线程的操作的响应,则可能导致活锁。与死锁一样,活锁线程无法取得进一步进展,但是,线程不会被阻塞 — 它们只是太忙于回应彼此而无法继续工作。这相当于两个试图在走廊里互相通过的人:Alphonse向左移动让Gaston通过,而Gaston向右移动让Alphonse通过,看到他们仍然互相阻塞,Alphone向右移动,而Gaston向左移动,他们还在互相阻塞,所以...。


上一篇:同步

下一篇:守护阻塞

脚本宝典总结

以上是脚本宝典为你收集整理的Java™ 教程(并发活性)全部内容,希望文章能够帮你解决Java™ 教程(并发活性)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。