精通多线程(一)-死锁

来源:互联网 发布:jquery ajax post json 编辑:程序博客网 时间:2024/06/11 22:23
/** * Created by gmy on 2017/10/14. */public class SimpleDeadLock {    public static final Object lock1=new Object();    public static final Object lock2=new Object();    private int index;    public static void main(String[] args) {        Thread t1=new Thread1();        Thread t2=new Thread2();        t1.start();        t2.start();    }    private static class Thread1 extends Thread{        public void run(){            synchronized (lock1){                System.out.println("线程1获得锁1");                try {                    Thread.sleep(10);                }catch (InterruptedException ignored){                }                System.out.println("线程1等待锁2");                synchronized (lock2){                    System.out.println("线程1拥有锁1锁2");                }            }        }    }    private static class Thread2 extends Thread{        public void run(){            synchronized (lock2){                System.out.println("线程2拥有锁2");                try {                    Thread.sleep(100);                }catch (InterruptedException ignored){                }                System.out.println("线程2等待锁1");                synchronized (lock1){                    System.out.println("线程2拥有锁1锁2");                }            }        }    }}

解析:

  1. 当一个线程拥有锁1并想获得锁2,而另一个线程拥有锁2并想获得锁1时便产生死锁.
  2. 谁拿到这个锁谁就可以运行它所控制的那段代码
  3. 一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞
原创粉丝点击