当前位置:首页 > 开发 > 编程语言 > Java > 正文

java 一个会发生死锁的例子

发表于: 2014-08-05   作者:墙头上一根草   来源:转载   浏览:
摘要: /**     * DeadLockThread.java Create on 2014年8月5日    *     * Copyright (c) 2014年8月5日 by dzh *     * @author <a href="

/**    
* 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 一个会发生死锁的例子

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于
freemarker-2.3.8.jar struts2-core-2.0.11.2.jar 我也是初学者,不知道有些地方对不对。乱写。呵呵
问题是这样的,如下图所示: 1.有一个线程模型,其中,MainThread为主线程,他有一些资源,比如两个
在读Steve Yegg的blog上 Rhinos and Tigers的时候读到这么一页演示稿: 以前一直没这么试过,觉得很
class Dead implements Runnable//实现接口 { private boolean flag; Dead(boolean flag) { this.fl
例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorSe
一、进程和线程的概念和区别 进程是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分
前言 死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽
class Dead implements Runnable//实现接口 { private boolean flag; Dead(boolean flag) { this.fl
public static void main(String[] args) { final LeftRightDeadLock lock = new LeftRightDeadLock
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号