public class MakeGirlfriend implements Runnable{
private int flag = 1; //flag = 1,代表:1号帅哥。flag = 2,代表:2好帅哥
static Object o1 = new Object(),o2 = new Object();
//这里的意思是o1代表:1号美女,o2代表:2号美女
@Override
public void run() { //导演准备的大房间,进行交谈交际测试的!
System.out.println("flag="+flag); //看2位帅哥角色有没有 进入房间这个房间
if(flag == 1){ //如果是1号帅哥就进来
synchronized(o1){ //如果1号帅哥先锁定1号美女的话,然后开始交往!
try {
Thread.sleep(500);//那么就必须等半分钟才可以去锁定2号美女
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(o2){ //如果1号帅哥把1号美女锁定后半分钟后,再来锁定2号美女那么
System.out.println("嘿嘿,1号美女跟2号美女都归我了,2个女朋友真爽啊!");
}
}
}
if(flag == 2){ //如果是2号帅哥就进来
synchronized(o2){ //如果2号帅哥先锁定2号美女的话,然后开始交往!
try {
Thread.sleep(500); //那么就必须等半分钟才可以去锁定1号美女
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(o1){ //如果2号帅哥把2号美女锁定后半分钟后,再来锁定1号美女那么
System.out.println("嘿嘿,1号美女跟2号美女都归我了,2个女朋友真爽啊!");
}
}
}
}
public static void main(String[] args) {//【演播大厅】导演说:我们需要dk01,dk02 这样的2个角色
MakeGirlfriend dk01 = new MakeGirlfriend(); //所以设计出了dk01角色
MakeGirlfriend dk02 = new MakeGirlfriend(); //所以设计出了dk02角色
//导演又说:需要2个演员来演这两个角色
//员工说:找到演员了,他们分别是(男1号)跟(男2号)
//导演说:让1号演dk01角色,让2号演dk02角色
dk01.flag = 1;
dk02.flag = 2;
new Thread(dk01).start(); //角色dk01准备开工
new Thread(dk02).start(); //角色dk02准备开工
}
}
//到底是1号帅哥得到了2个美女还是2号帅哥得到了2个美女呢?
//哈哈,发现自己好坏!
//哈哈
分享到:
相关推荐
java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁源码java死锁...
在Java编程中,死锁是并发编程中一个重要的概念,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。这个例子中,我们将会深入探讨死锁的产生、识别以及如何避免它。 首先,让我们理解...
Java 模拟线程死锁 线程死锁 在 Java 中,线程死锁(Deadlock)是一种特殊的情况,发生在两个或多个线程之间的互相等待对方释放资源的状态。这种情况下,各个线程都在等待其他线程释放资源,而自己也占用着其他...
在Java编程中,死锁(DeadLock)是一个重要的并发控制问题,它发生在两个或多个线程互相持有对方需要的资源并等待对方释放时,导致所有线程都无法继续执行的情况。死锁是多线程编程中需要特别注意和避免的问题,因为...
java Thread Dump 其实就是stack trace。 我们平时经常会碰见java异常,并且得到异常的方法用e.printstacktrace 实际上程序正常运行时也是会有stack trace的,只不过平时不显示出来而已。如何能正常及时显示堆栈信息...
在Java编程中,死锁是多线程环境下常见的问题,当两个或多个线程相互等待对方释放资源,导致它们都无法继续执行时,就会出现死锁。`synchronized`关键字是Java提供的一种内置锁机制,用于控制对共享资源的并发访问,...
线程池里的线程等待等待队列里的线程执行,等待队列里的等待线程池里的完成,相互等待
Java多线程编程是开发高并发应用的关键技术之一,但随之而来的是各种复杂的问题,其中最令人头疼的就是死锁。死锁是指两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。JCarder是Java中用于检测...
在Java中,死锁可以通过以下方式来避免: **预防死锁:** 1. **避免嵌套锁**:尽量减少一个线程同时请求多个资源的情况。 2. **设置锁顺序**:如果多个线程需要获取多个资源,规定一个固定的获取顺序,可以避免循环...
### Java多线程死锁预防机制研究 #### 摘要 随着计算机技术的发展和软件系统日益复杂的背景下,多线程编程技术得到了广泛的应用。多线程能够显著提高程序的执行效率,但也随之带来了诸如死锁等问题。死锁是指两个或...
Java线程死锁实例及解决方法 Java线程死锁是一种特殊的线程状态,发生死锁时,多个线程会相互等待,无法继续执行,直到外部干预。下面是Java线程死锁实例及解决方法的详细介绍。 一、死锁的定义 所谓死锁是指多个...
Java死锁问题是一个在多线程编程中常见的复杂情况,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。理解并解决死锁是Java开发者必须掌握的关键技能之一,尤其是在构建高并发、多线程...
Java Thread Dump 分析 Java Thread Dump 分析是 Java 应用程序性能优化的重要工具之一。Thread Dump 是 JVM 的一个快照,记录了当前所有线程的状态,包括线程的 ID、名称、状态、锁信息等。通过分析 Thread Dump,...
本教程将通过Java实现死锁的模拟,帮助学习者理解这一复杂的概念,并提供一个简单的、易于理解的解决方案。 首先,我们需要了解死锁的四个必要条件: 1. **互斥条件**:资源必须被单个进程独占,即在同一时刻,...
Java 线程死锁的问题解决办法 Java 线程死锁是指两个或两个以上的线程在执行过程中,相互等待对方释放资源,从而造成的僵持状态。在 Java 中,线程死锁的问题解决办法是非常重要的,下面我们将深入探讨 Java 线程...
本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。
本文主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。以下是对该示例的详细解释和知识点总结: 1. 死锁的概念:死锁是操作系统层面的一个错误,是进程死锁的简称,最早在 ...
本文将深入探讨Java中死锁的概念、产生的原因以及如何有效地解决死锁问题。 死锁是指两个或多个并发执行的线程相互等待对方释放资源,导致它们都无法继续执行的状态。在Java中,死锁通常与多线程同步有关,尤其是当...
在Java编程中,死锁和生产者消费者问题是多线程编程中的两个重要概念,它们涉及到并发执行和资源管理。理解并正确处理这些问题对于构建高效、可靠的多线程应用至关重要。 死锁是指两个或多个线程在执行过程中,因...
在Java中,可以通过两种方式创建线程:继承Thread类或实现Runnable接口。继承Thread类的方法直接扩展Thread类并重写run()方法,而实现Runnable接口则需要创建一个实现了Runnable接口的类,并在run()方法中定义线程的...