文章目录
一、什么是死锁?二、产生死锁的条件?三、产生死锁的示例代码(java)四、如何避免死锁?一、什么是死锁?
下面图片参考 JavaGuide中的内容:死锁的概念:
死锁:指的是相互两个线程之间都需要获取对方的资源才能进行下一步,如果每个线程都不肯将自己所持有的资源释放掉,这时就会导致死锁了。
二、产生死锁的条件?
产生死锁的条件:三、产生死锁的示例代码(java)
代码实现:package DeadLock;public class DeadLock {//先定义两个静态类型的字符串,让两个字符串来作为锁,方便后序加锁public static String obj1 = "obj1";public static String obj2 = "obj2";public static void main(String[] args){Thread a = new Thread(new Lock1());Thread b = new Thread(new Lock2());a.start();b.start();}}//继承Runnable接口,实现多线程class Lock1 implements Runnable{@Overridepublic void run(){try{System.out.println("Lock1 running");while(true){synchronized(DeadLock.obj1){System.out.println("Lock1 lock obj1");Thread.sleep(3000);synchronized(DeadLock.obj2){System.out.println("Lock1 lock obj2");}}}}catch(Exception e){e.printStackTrace();}}}//继承Runnable接口,实现多线程class Lock2 implements Runnable{@Overridepublic void run(){try{System.out.println("Lock2 running");while(true){synchronized(DeadLock.obj2){System.out.println("Lock2 lock obj2");Thread.sleep(3000);synchronized(DeadLock.obj1){System.out.println("Lock2 lock obj1");}}}}catch(Exception e){e.printStackTrace();}}}
代码执行结果: