26.多线程----死锁

原创
2017/08/02 19:08
阅读数 34

1.现象 两个线程都在等待  

2.代码

2.1造两个线程锁类

2.2 实现多线成类

2.3 测试类

3.代码

3.1 造锁对象类

package cn.ma.dielock;
/**
 * 造两把锁对象
 *
 */
public class myLock {
    public static final Object objA = new Object();
    
    public static final Object objB = new Object();
}
 

3.2 实现多线成类

package cn.ma.dielock;

public class dieLock extends Thread {
    private Boolean flag;//1.标记
    //2.带参构造 为了给flag赋值
    public dieLock(boolean flag) {
        this.flag=flag;
    }
    @Override
    public void run() {
        if (flag) {
            synchronized (myLock.objA) {//线程A
                System.out.println("我是objA对象");
                synchronized (myLock.objB) {// 确需要线程B 对象锁
                    System.out.println("我是objB对象");
                }
            }
        } else {
            synchronized (myLock.objB) {//线程B
                System.out.println("我是objB对象");
                synchronized (myLock.objA) {// 确需要线程A 对象锁
                    System.out.println("我是objA对象");
                }
            }
        }
    }
    public Boolean getFlag() {
        return flag;
    }
    public void setFlag(Boolean flag) {
        this.flag = flag;
    }
}
 

3.3测试类

package cn.ma.dielock;
/**
 * 死锁:
 *         就是多个线程互相那调用对方的锁对象,但是对方又没有释放锁对象,导致互相等待现象
 *
 */

public class Test {
        public static void main(String[] args) {
        //当线程d1 d2 同时执行的时候就会发生死锁问题    因为d1,d2都没有释放锁
            dieLock d1 = new dieLock(true);
            dieLock d2 = new dieLock(false);
            d1.start();
            d2.start();
        }
}
 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部