`
墙头上一根草
  • 浏览: 154601 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 一个会发生死锁的例子

    博客分类:
  • java
阅读更多

/**    
* DeadLockThread.java Create on 2014年8月5日   
*    
* Copyright (c) 2014年8月5日 by dzh
*    
* @author <a href="xingyu@gw.com.cn">xingyu</a>   
* @version 0.0.1
*   
*/
package org.dzh.thread.deadlock;

/**@className:DeadLockThread.java

 * @description:死锁线程

 * @date 2014年8月5日 下午5:58:51
 */
public class DeadLockThread implements Runnable{
    private static Object obj1 = new Object(),obj2 = new Object();
   
    @Override
    public void run() {
       
        if(Thread.currentThread().getName().equals("S1")){
            synchronized (obj1) {
                System.out.println("获得线程S1的资源,然后锁S2");
               
                synchronized (obj2) {
                    System.out.println("获得线程S2的资源");
                }
            }
        }else if(Thread.currentThread().getName().equals("S2")){
            synchronized (obj2) {
                System.out.println("获得线程S2的资源,然后锁S1");
               
                synchronized (obj1) {
                    System.out.println("获得线程S1的资源");
                }
            }
        }
    }
}

 

/**    
* DeadLockMain.java Create on 2014年8月5日   
*    
* Copyright (c) 2014年8月5日 by dzh
*    
* @author <a href="xingyu@gw.com.cn">xingyu</a>   
* @version 0.0.1
*   
*/
package org.dzh.thread.deadlock;

/**@className:DeadLockMain.java

 * @description:insert this file desc

 * @date 2014年8月5日 下午6:01:38
 */
public class DeadLockMain {

    public static void main(String[] args) {
        Thread s1 = new Thread(new DeadLockThread(), "S1");
        Thread s2 = new Thread(new DeadLockThread(), "S2");
       
        s1.start();
        s2.start();
    }
}

 

正常运行结果为:

    获得线程S2的资源,然后锁S1
    获得线程S1的资源
    获得线程S1的资源,然后锁S2
    获得线程S2的资源

 

发生死锁的结果为:

      获得线程S2的资源,然后锁S1
      获得线程S1的资源,然后锁S2

 

如果想每次都死锁可以在run()方法中,暂停以下

分享到:
评论

相关推荐

    java 一个死锁的例子

    在Java编程中,死锁是并发编程中一个重要的概念,它发生在两个或多个线程相互等待对方释放资源,导致它们都无法继续执行的情况。这个例子中,我们将会深入探讨死锁的产生、识别以及如何避免它。 首先,让我们理解...

    Java中死锁的例子

    在Java编程中,死锁(DeadLock)是一个重要的并发控制问题,它发生在两个或多个线程互相持有对方需要的资源并等待对方释放时,导致所有线程都无法继续执行的情况。死锁是多线程编程中需要特别注意和避免的问题,因为...

    一个java线程池死锁的例子

    线程池里的线程等待等待队列里的线程执行,等待队列里的等待线程池里的完成,相互等待

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

    标题:一个简单的和死锁有关的程序 描述与分析: 本程序通过两个`DeadThread`线程类实例和两个`Test`对象实例演示了死锁(deadlock)现象。死锁是多线程编程中常见的一种问题,发生在多个线程相互等待对方释放资源...

    JAVA_线程同步与死锁

    一个详细讲解JAVA_线程同步与死锁的例子 希望可以帮助到你。

    Java解决死锁问题eclipse代码版

    在Java编程中,死锁是多线程环境下常见的问题,当两个或多个线程相互等待对方释放资源,导致它们都无法继续执行时,就会出现死锁。`synchronized`关键字是Java提供的一种内置锁机制,用于控制对共享资源的并发访问,...

    Java线程的同步与死锁

    本文将深入探讨Java线程中的同步机制及其可能导致的一个严重问题——死锁,并通过具体的示例来帮助读者更好地理解和解决这些问题。 #### 二、Java线程同步 ##### 2.1 同步的重要性 在多线程环境中,多个线程可能会...

    Java多线程之-死锁.doc

    Java 多线程中的死锁是指两个或两个以上的线程互相持有对方所需要的资源,由于 synchronized 的特性,一个线程持有一个资源,或者说获得一个锁,在该线程释放这个锁之前,其它线程是获取不到这个锁的,而且会一直死...

    死锁算法 Java实现 操作系统

    在操作系统领域,死锁是一个非常重要的概念,它发生在两个或多个进程之间,每个进程都在等待其他进程释放资源,导致它们都无法继续执行。本教程将通过Java实现死锁的模拟,帮助学习者理解这一复杂的概念,并提供一个...

    Java 死锁示例性源代码

    本源代码是博客《Java 多线程编程之七:死锁(附源代码)》附带的实例性源代码。原博客链接地址:http://blog.csdn.net/defonds/archive/2010/01/26/5258120.aspx。

    Java 编程 线程调度 死锁避免

    在这个例子中,如果`method1`先获取`lock1`,然后调用`method2`尝试获取`lock2`,而另一个线程恰好先获取了`lock2`并尝试获取`lock1`,就会出现死锁。使用`ReentrantLock`的`tryLock()`可以避免这种情况,因为它允许...

    java多线程例子

    在第一个例子中,我们将继承 Thread 类来创建一个多线程类 TestThread。 ```java public class ThreadDemo { public static void main(String[] args) { new TestThread().start(); while(true) { System.out....

    java中线程的应用例子

    以下是一个实现`Runnable`的例子: ```java public class MyRunnable implements Runnable { public void run() { // 这里编写线程执行的代码 } } // 创建线程并启动 Thread thread = new Thread(new ...

    java线程死锁代码示例

    本文主要介绍了java线程死锁代码示例,分享了一个简单线程死锁的例子,需要的朋友可以参考下。以下是对该示例的详细解释和知识点总结: 1. 死锁的概念:死锁是操作系统层面的一个错误,是进程死锁的简称,最早在 ...

    Java应用教程(PPT&code)

    介绍Java的安装、配置环境变量,并讲解如何编写第一个"Hello, World!"程序。 2. **语法结构**:深入探讨Java的语法,如变量、数据类型、运算符、流程控制(条件语句、循环语句)、异常处理等。 3. **面向对象编程*...

    Java多线程死锁示例

    在本示例中,我们将深入探讨Java多线程死锁的概念,并通过一个具体的代码示例来理解其工作原理和避免策略。 首先,我们来看标题中的关键点——“Java多线程死锁示例”。死锁是多线程编程中的一种异常状态,通常发生...

    java100例,java的经典例子

    这100个例子可能包括了以上所有或部分知识点,通过实践每个例子,学习者能更好地理解Java语言的特性和用途,从而提升编程技能。在学习过程中,一定要注意阅读源码、理解代码逻辑,并尝试自己动手编写和修改,这是...

    java基础知识的100个例子

    4. **继承与多态**:Java支持单一继承,一个子类可以继承父类的属性和方法。多态允许不同的子类对象对同一消息做出不同的响应,增强了代码的灵活性。 5. **接口**:接口是完全抽象的类,用于定义一组方法,实现多个...

    Java线程的简单例子

    为了避免死锁,我们需要遵循四个条件的至少一个:互斥、请求与保持、不剥夺和循环等待。Java提供了一些工具如jstack和VisualVM来诊断和解决死锁问题。 总结起来,Java线程涉及的内容广泛,包括线程的创建、控制、...

    详解java中产生死锁的原因及如何避免

    java中的死锁是一个常见的问题,它会导致程序的崩溃甚至是系统的崩溃。因此,了解java中产生死锁的原因和如何避免是非常重要的。 java中产生死锁的原因 在java中,死锁是指两个或多个线程之间由于锁的原因而相互...

Global site tag (gtag.js) - Google Analytics