`

死锁的例子描述对吗

阅读更多
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 describes a situation where two or more threads are blocked forever, waiting for each other. Here's an example.

Alphonse and Gaston are friends, and great believers in courtesy. A strict rule of courtesy is that when you bow to a friend, you must remain bowed until your friend has a chance to return the bow. Unfortunately, this rule does not account for the possibility that two friends might bow to each other at the same time. This example application, Deadlock , models this possibility:

 

http://java.sun.com/docs/books/tutorial/essential/concurrency/deadlock.html

 

礼仪的做法是你向对方鞠躬之后,你必须保持鞠躬姿势直到对方有机会向你回鞠躬

 

看打印描述,貌似

a.bow(b): 是b向a鞠躬

b.bowBack(a): 是a向b回鞠躬

 

我觉得更直观理解应该是:

a.bow(b): 是a向b鞠躬

b.bowBack(a): 是b向a回鞠躬

 

 

 

分享到:
评论

相关推荐

    万向节死锁 Krasjet

    使用欧拉角对三维旋转进行描述时,旋转顺序非常关键。通常,我们遵循一个固定的顺序(如zyx、zxy、xyz等),而不同的旋转顺序代表了不同的旋转策略。 数学上,通过欧拉角表示旋转时,可以使用对应的旋转矩阵来进行...

    一个简单的和死锁有关的程序

    描述与分析: 本程序通过两个`DeadThread`线程类实例和两个`Test`对象实例演示了死锁(deadlock)现象。死锁是多线程编程中常见的一种问题,发生在多个线程相互等待对方释放资源而无限期阻塞的情况。 在代码中,`...

    Mysql 数据库死锁过程分析(select for update)

    在描述的场景中,死锁并不是由于两台机器同时`SELECT ... FOR UPDATE`相同数据导致的,而是由于`SELECT ... FOR UPDATE`与`UPDATE`语句之间的交互引发的。 一个例子是,当一个事务用`SELECT ... FOR UPDATE`锁定了...

    ch7 进程死锁算法1

    在描述死锁问题时,通常会考虑以下四个必要条件: 1. 互斥条件:资源必须被一个进程独占,不能同时被多个进程使用。 2. 请求与保持条件:进程已经占有至少一个资源,但又请求新的资源。 3. 不剥夺条件:进程已获得的...

    操作系统(第4版)第8章 死锁

    死锁的示例可以用汽车过桥的例子来解释。假设有两个汽车要过一座窄桥, Bridge如果两个汽车同时开到桥上,势必会发生冲突。类似地,在计算机系统中,涉及软件、硬件资源的进程都可能发生死锁。 8.2.2 死锁的必要...

    资源死锁PPT学习教案.pptx

    为了描述死锁,可以使用资源分配图,图中包含进程节点和资源节点,通过边来表示资源的分配关系。通过分析这个图,可以发现和解决死锁问题。 解决死锁的方法通常包括预防、避免和检测恢复。预防死锁是通过设置规则...

    105-演示文稿-死锁检测和恢复.pdf

    并且,通过具体的例子(5个进程,3类资源),演示了如何使用这些数据结构来判断系统是否处于死锁状态,并通过死锁检测算法找到安全序列以避免死锁。此外,文档还讨论了死锁恢复的两种途径:进程终止(Process ...

    一次神奇的MySQL死锁排查记录

    在描述中提到的背景,我们了解到作者之前对MySQL锁机制有一定的了解,但在处理一个特定的死锁问题时遇到了挑战。问题始于系统报警,抛出了一个事务回滚异常,明确指出死锁是导致事务回滚的原因。面对这种情况,作者...

    Java多线程死锁示例

    描述中提到,这个示例会结合实例分析死锁的原因和注意事项。理解死锁的原因有助于我们在编写多线程代码时避免这类问题。在Java中,死锁的发生通常满足四个条件: 1. 互斥条件:每个资源在任何时候只能被一个线程...

    博客中文章的例子源码demo2

    描述中的“博客demo例子”进一步确认了这一点,它可能来源于一篇博客文章,作者为了详细解释某个编程概念或技巧,提供了这段可运行的代码。通常,这样的代码实例可以帮助读者更好地理解文章内容,通过实践来学习和...

    一次离奇的 MySQL 死锁分析

    InnoDB是MySQL中广泛使用的事务型存储引擎,支持多种事务隔离级别,其中包括描述中提到的“可重复读”(Repeatable Read)级别。在这个级别下,事务能够看到它开始时的数据视图,即使其他事务在此期间对数据进行了修改...

    操作系统实验1进程控制与描述

    在这个“操作系统实验1:进程控制与描述”中,我们将深入理解进程的基本概念,掌握进程的创建、同步、通信以及调度等核心知识点。 首先,我们需要了解什么是进程。在操作系统中,进程是程序的一次动态执行过程,它...

    串口使用例子

    例如,在本例中,定时器可能被用来设置超时机制,如果在预设时间内未接收到刷卡器的回应,程序会触发超时提醒,避免因为网络延迟或设备故障导致的死锁。Windows Forms中的System.Windows.Forms.Timer类可以轻松实现...

    多线程例子

    描述虽然简短,但暗示我们将通过具体的示例来学习这一主题。 在Java编程语言中,多线程是通过`Thread`类或者`Runnable`接口实现的。创建一个新的线程有两种主要方法: 1. **继承Thread类**:创建一个新的类,该类...

    多线程小例子

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发、GUI应用程序以及高性能计算中。...通过对这个例子的分析和实践,你可以加深对并发编程的理解,为构建高效、稳定的多线程应用打下坚实的基础。

    ddkusb-DDK开发例子

    4. **USB描述符**:包括设备描述符、配置描述符、接口描述符、端点描述符等,这些都是设备向主机报告其特性的关键数据结构。 5. **枚举过程**:当USB设备插入时,系统如何发现并枚举设备,以及驱动程序如何参与到这...

Global site tag (gtag.js) - Google Analytics