Java死锁的简单例子

Java死锁的简单例子

两个线程互相占有对方需要的资源而不释放,便形成了死锁。

代码如下:
Program.java


/**
 * 程序类
 * @author michael
 *
 */
public class Program implements Runnable {
    
    //两个静态的资源
    public static Object obj1 = new Object();
    public static Object obj2 = new Object();
    
    //标志位
    public int flag = 1;    //1 or 2
    
    @Override
    public void run() {
        
        if(flag == 1) {
            synchronized (obj1) {
                System.out.println("flag: " + flag + ", 锁住了资源obj1");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("flag: " + flag + ", 等待获取资源obj2");
                synchronized (obj2) {
                    System.out.println("flag: " + flag + ", 获得资源obj2");
                }
            }
        } else if(flag == 2) {
            synchronized (obj2) {
                System.out.println("flag: " + flag + ", 锁住了资源obj2");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("flag: " + flag + ", 等待获取资源obj1");
                synchronized (obj1) {
                    System.out.println("flag: " + flag + ", 获得资源obj1");
                }
            }
        }   
    }
        
}

DeadLock.java

DeadLock.java
/**
 * 死锁测试.
 * @author michael
 *
 */
public class DeadLock {
    
    public static void main(String[] args) {
        
        Program p1 = new Program();
        Program p2 = new Program();
        p1.flag = 1;
        p2.flag = 2;
        
        new Thread(p1).start();
        new Thread(p2).start();
        
    }
    
}

控制台结果:


这里写图片描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 1,682评论 2 17
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,370评论 11 349
  • 一、概念 1.array无法判断其中实际存有多少元素,length只是告诉我们array的容量。 二、参考关于 J...
    合肥黑阅读 495评论 0 1
  • 作业一、 列清单 生命中最重要的人。 1、我爸 2、我妈 3、我外公 4、我舅舅 5、7姐 写特点 10个词或短句...
    止行阅读 296评论 0 0
  • 7月6日 星期四 晴 陈小米今天一大早出去和爸爸逛家具城,想买一张最简单的桌子。 陈小米发现大多数桌子的功能很多,...
    语味悠长阅读 334评论 2 2