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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容