1. 程式人生 > >死鎖的實現

死鎖的實現

死鎖:就是當程式拿著鎖A的時候再想拿鎖B去做一些事情,在沒拿到鎖B之前這個鎖B被另外一個執行緒拿去了,另外一個執行緒拿到B再想拿鎖A去做事情。但是執行緒1沒有釋放鎖A,所以執行緒2一直不能繼續做事情,就釋放不了鎖B導致執行緒1也無法繼續進行下面的事情。所以形成了死鎖。

死鎖必須是多執行緒的。

public class DealLockDemo implements Runnable{
    private boolean flag ;
    private static final Object locka = new Object();
    private static final Object lockb = new Object();
    
    public DealLockDemo(boolean flag){
        this.flag = flag;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        if(flag){
            synchronized(locka)
            {
                System.out.println(Thread.currentThread().getName()+" .. if locka");
                synchronized(lockb){
                    System.out.println(Thread.currentThread().getName()+".. if lockb");
                }
            }
        }else{
            synchronized(lockb){
                System.out.println(Thread.currentThread().getName()+".. else lockb");
                synchronized (locka) {
                    System.out.println(Thread.currentThread().getName() + ".. else locka");
                }
            }
        }
        
    }
    
}
 

這個是呼叫類:

public class RunDealLock {
        public static void main(String[] args) {
            DealLockDemo dealLockDemo = new DealLockDemo(true);
            DealLockDemo dealLockDemo2 = new DealLockDemo(false);
            
            Thread thread = new Thread(dealLockDemo);
            Thread thread2 = new Thread(dealLockDemo2);
            thread.start();
            thread2.start();
        }
        
}