Java实现的死锁示例

来源:互联网 发布:网络营销推广软件 编辑:程序博客网 时间:2024/05/21 06:02

     死锁一定要满足这个条件:线程一占用着资源A , 现在又需要申请资源B  。 线程二占用着资源B  , 现在又需要申请资源A  


class DeadLock implements Runnable {
    
    public int flag = 1;
    static Object o1 = new Object(), o2 = new Object();

    public void run() {
        if (flag == 1) {
            synchronized (o1) {//对o1对象加锁
                try {
                    System.out.println(Thread.currentThread().getName()+"持有对O1锁");
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                synchronized (o2) {
                    System.out.println(Thread.currentThread().getName()+"申请对O2锁");
                }
            }//对o1对象加锁
        }
        if (flag == 0) {
            synchronized (o2) {//对o2对象加锁
                try {
                    System.out.println(Thread.currentThread().getName()+"持有对O2锁");
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                synchronized (o1) {
                    System.out.println(Thread.currentThread().getName()+"申请对O1锁");
                }
            }//对o2对象加锁
        }
    }

}

public class DeadLockTest {

    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();

    }
}


0 0
原创粉丝点击