死锁 过多的同步将产生死锁 ▪ 同步可以保证资源共享操作的正确性,但是过多同步也会产生死锁 ▪ 死锁一般情况下表示互相等待,是程序运行时出现的一种问题


线程1和线程2共用对象o1和o2,且它们都想要对方的锁,最终形成阻塞,一直等待下去,这种现象就是死锁 就比如 互不信任的两个人都想把自己手里的东西与对方交换,但因为都不信任对方,担心对方拿走自己的就跑了,就一直想让对方先拿出来,从而就一直等待着


public class ThreadWork2 implements Runnable{

    public static Object o1 = new Object();
    public static Object o2 = new Object();

    public int flag;//属性,又叫成员变量

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

    @Override
    public void run() {
        if(flag==1){
            //代码块一
            synchronized (o1){
                System.out.println("one-1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o2){
                    System.out.println("one-2");
                }
            }
        }else{
            //代码块二
            synchronized (o2){
                System.out.println("two-1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o1){
                    System.out.println("two-2");
                }
            }
        }
    }

    public static void main(String[] args) {
        //创建线程1,flag 属性值为1
        ThreadWork2 d1 = new ThreadWork2(1);
        //创建线程2,flag 属性值为2
        ThreadWork2 d2 = new ThreadWork2(2);
        //启动线程1和线程2

        new Thread(d1).start();

        new Thread(d2).start();
    }
}