四、活性
(一) 死锁
一个并发应用的即使执行能力叫做它的活性。这章描述了很多一般类型的活性问题,死锁,然后简单的描述了另两个问题,饥饿和活锁。
死锁就是俩个或多个线程互相等待造成永远被阻塞的状况。这里有一个例子。
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运行,当2个线程试图调用bowBack时,非常有可能这2个线程会被阻塞。并且阻塞永远不会结束,因为每个线程都在等待其他的线程退出bow。
(二) 饥渴和活锁
饥渴和活锁相比死锁是不那么常见的问题,但是仍然是同步软件开发的每个开发者有可能会遇到的问题。
1. 饥渴
饥渴描述了这样一种状况:一个线程不能够正常访问共享资源造成它不能够前进往下执行。这通常发生在当共享资源因为贪婪的线程长时间不能够被其他线程获得。比如,假如有一个同步方法通常需要很长时间才返回。如果一个线程频繁调用这个方法,其他的线程也需要频繁的同步访问同一个对象,这就会造成阻塞。
2. 活锁
一个线程通常会有一些动作回应其他线程的活动。如果其他线程也会回应另一个线程的活动。这时就会导致活锁的发生。就像死锁,活锁也不能继续向前执行。然而线程并没有被阻塞-它们只是忙于彼此互相回应而不能继续工作。这可以比作有2个人在走廊上试图让彼此都通过:Alphonse移动他的左脚让Gaston通过,同时Gaston移动他的右脚让Alphonse通过。可以看到他们仍然互相阻塞,Alphone移动他右脚的时候,Gaston移动他的左脚。他们仍然互相阻塞,这样…
分享到:
相关推荐
java并发编程pdf文档第二部分:Java并发编程实战.pdf、Java多线程编程核心技术.pdf、实战Java高并发程序设计.pdf
java并发编程实战源码 附有本书所有源码,maven 导入 eclipse或idea
java并发编程艺术java并发编程艺术java并发编程艺术java并发编程艺术java并发编程艺术
JAVA并发编程艺术 高清pdf : 1.并发变成的挑战 2. java并发机制的底层实现原理 3. java 内存模型 4. java并发编程基础 5.java中的锁。。。。。。。
JAVA并发编程实践中文版 英文版 原书源码 带书签 java_concurrency_in_practice.pdf 英文版还是不错的,但是中文版的译者典型的没有技术功底,介绍上说什么专家, 翻译的非常差劲,有些句子都不通顺,都不知道自己去...
自从java创建以来就已经支持并发的理念,如线程和锁。这篇指南主要是为帮助java多线程开发人员理解并发的核心概念以及如何应用这些理念。本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及...
《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...
这就是最正宗的《Java 并发编程实战》带目录 用福昕阅读器打开查看特别的清晰
《JAVA并发编程实践》随着多核处理器的普及,使用并发成为构建高性能应用程序的关键。Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在...
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
深入讲解java并发编程技术,多线程、锁以及java内存模型等
java并发编程内部分享PPT
java 并发编程实践java 并发编程实践java 并发编程实践java 并发编程实践java 并发编程实践
java并发编程与实践是java高并发的分析文档,分析并介绍了高并发的解决方案。
《java并发编程实战》是java并发的圣经。亲自整理目录结构,层级分明(福昕阅读器整理)。高清。
第1章 简介 1.1 并发简史 1.2 线程的优势 ...第四部分 高级主题 第13章 显式锁 第14章 构建自定义的同步工具 第15章 原子变量与非阻塞同步机制 第16章 Java内存模型 附录A 并发性标注 参考文献
java 并发编程的艺术pdf清晰完整版 源码
JAVA并发编程(阿里巴巴培训资料) Java 并发编程培训(阿里巴巴) ppt 文档。
java并发编程实战 pdf