• 一个简答的java死锁


    在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子,程序说明都写着类的注释里了,有点罗嗦,但是应该也还是表述清楚了的。

    [code=java]

    /**
    * 一个简单的死锁类
    * @author iStar
    * 当类的对象flag=1时(T1),先锁定O1,睡眠500毫秒,然后锁定O2;
    * 而T1在睡眠的时候另一个flag=0的对象(T2)线程启动,先锁定O2,睡眠500毫秒,等待T1释放O1;
    * T1睡眠结束后需要锁定O2才能继续执行,而此时O2已被T2锁定;
    * T2睡眠结束后需要锁定O1才能继续执行,而此时O1已被T1锁定;
    * T1、T2相互等待,都需要对方锁定的资源才能继续执行,从而死锁。
    */
    class DeadLock implements Runnable {
    public int flag = 1;
    static Object o1 = new Object(), o2 = new Object();

    @Override
    public void run() {
    System.out.println("flag=" + flag);
    if(flag == 1) {
    synchronized(o1) {
    try {
    Thread.sleep(500);
    } catch (Exception e) {
    e.printStackTrace();
    }
    synchronized(o2) {
    System.out.println("1");
    }
    }
    }
    if(flag == 0) {
    synchronized(o2) {
    try {
    Thread.sleep(500);
    } catch (Exception e) {
    e.printStackTrace();
    }
    synchronized(o1) {
    System.out.println("0");
    }
    }
    }
    }

    public static void main(String[] args) {
    DeadLock td1 = new DeadLock();
    DeadLock td2 = new DeadLock();
    td1.flag = 1;
    td2.flag = 0;
    new Thread(td1).start();
    new Thread(td2).start();

    }
    }
    [/code]

  • 相关阅读:
    jquery 序列化form表单
    nginx for windows 安装
    nodejs idea 创建项目 (一)
    spring 配置 shiro rememberMe
    idea 2018 解决 双击shift 弹出 search everywhere 搜索框的方法
    redis 在windows 集群
    spring IOC控制反转和DI依赖注入
    redis 的安装
    shiro 通过jdbc连接数据库
    handlebars的用法
  • 原文地址:https://www.cnblogs.com/javadan/p/4809313.html
Copyright © 2020-2023  润新知