[Java] java 线程死锁演示 →→→→→进入此内容的聊天室

来自 , 2020-09-23, 写在 Java, 查看 97 次.
URL http://www.code666.cn/view/a34bacf8
  1. package org.he.bin;
  2. /**
  3.  * @author BenHe
  4.  * @email qing878@gmail.com
  5.  * @for description dead lock
  6.  */
  7. public class DeadLock extends Thread {
  8.     private boolean threadFlag;
  9.     private Object lock1 ;
  10.     private Object lock2 ;
  11.     public DeadLock(boolean threadFlag,Object lock1,Object lock2) {
  12.         this.threadFlag = threadFlag;
  13.         this.lock1=lock1;
  14.         this.lock2=lock2;
  15.     }
  16.  
  17.     @Override
  18.     public void run() {
  19.         try {
  20.             if (threadFlag)
  21.                 methodA();
  22.             else
  23.                 methodB();
  24.         } catch (InterruptedException e) {
  25.             System.out.println(e.getMessage());
  26.         }
  27.     }
  28.  
  29.     void methodA() throws InterruptedException {
  30.         synchronized (lock2) {
  31.             Thread.sleep(10); // point A
  32.             System.out.println(this.getName()+":lock lock2");
  33.             System.out.println(this.getName()+":wait for lock1");
  34.             synchronized (lock1) {
  35.                 System.out.println(this.getName()+":in methodA");
  36.             }
  37.         }
  38.     }
  39.  
  40.     void methodB() throws InterruptedException {
  41. //      Thread.sleep(10);  //point B
  42.         synchronized (lock1) {
  43.             System.out.println(this.getName()+":lock lock1");
  44.             System.out.println(this.getName()+":wait for lock2");
  45.             synchronized (lock2) {
  46.                 System.out.println(this.getName()+":in methodB");
  47.             }
  48.         }
  49.     }
  50.  
  51.     /**
  52.      * @param args
  53.      */
  54.     public static void main(String[] args) {
  55.         Object lock1 = new Object();
  56.         Object lock2 = new Object();
  57.         new DeadLock(true,lock1,lock2).start();
  58.         new DeadLock(false,lock1,lock2).start();
  59.     }
  60.  
  61. }
  62.  
  63. //源代码片段来自云代码http://yuncode.net
  64.                        

回复 "java 线程死锁演示"

这儿你可以回复上面这条便签

captcha