Java并發案例01---多線程之死鎖

多線程之死鎖案例一

package example;
/**
 * 模擬死鎖
 * @author maple
 *
 */
public class DeadLock {
    
    public int flag = 1;
    /**
     * 這里必須要用靜態的鎖對象,o1,o2
     * 因為new兩個對象時,他們共享靜態變量,持有的鎖才會有沖突
     */
    private static Object o1 = new Object();
    private static Object o2 = new Object();

    public DeadLock(int flag) {
        this.flag=flag;
    }

    
    public void m(){
        if(flag == 1){
            synchronized (o1) {
                System.out.println("i am in  flag 1");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                synchronized (o2) {
                    System.out.println("i have o2");
                }
                
            }
        }
        
        if(flag == 0){
            synchronized (o2) {
                System.out.println("i am in  flag 0");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                synchronized (o1) {
                    System.out.println("i have o1");
                }
                
            }
        }
        
        
    }
    
    public static void main(String[] args) {
        DeadLock d1 = new DeadLock(1);
        DeadLock d2 = new DeadLock(0);
        
        new Thread(()->d1.m(),"t1").start();
        new Thread(()->d2.m(),"t2").start();
    }
    
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容