死锁的产生以及定位死锁

死锁的产生:

  1、两个线程,各自拥有一个加锁的资源,同时都想获取对方手中的资源。

代码示例:  

public class DeadLock {
  public static void main(String[] args) {
    Object a = new Object();
    Object b = new Object();
    new Thread(new MyThread(a,b),"A").start();
    new Thread(new MyThread(b,a),"B").start();
  }
}
class MyThread implements Runnable{
  private Object objectA;
  private Object objectB;
  public MyThread(Object objectA, Object objectB) {
    this.objectA = objectA;
    this.objectB = objectB;
  }
  @Override
  public void run() {
    synchronized (objectA){
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      synchronized (objectB){
        System.out.println(Thread.currentThread().getName()+" run 。");
      }
    }
  }
}

死锁的定位:jconsole

由上图可以发现,我们创建的线程A,B都处在阻塞状态。

点击 “检测死锁” 按钮,即可定位死锁发生的地方,如下图:

 

猜你喜欢

转载自www.cnblogs.com/chen--biao/p/11350205.html