>  기사  >  Java  >  Java의 스레드 교착 상태 문제에 대한 솔루션

Java의 스레드 교착 상태 문제에 대한 솔루션

黄舟
黄舟원래의
2017-09-26 09:59:302303검색

이 기사는 주로 Java 스레드 교착 상태 문제를 해결하는 방법에 대한 관련 정보를 소개합니다. 이 기사가 모든 사람에게 도움이 되고 비슷한 문제를 해결하는 데 도움이 되기를 바랍니다. 도움이 필요한 친구는 이 문서를 참조할 수 있습니다.

【스레드 교착 상태】

원인: 두 스레드가 서로의 리소스가 잠겨 있는 것을 기다리고 있습니다.
코드 시뮬레이션:


public class DeadLock {
  public static void main(String[] args) {
    Object obj = new Object();
    Object obj1 = new Object();
    DeadLockThread1 D1 = new DeadLockThread1(obj, obj1);
    DeadLockThread2 D2 = new DeadLockThread2(obj, obj1);
    new Thread(D1,"线程1").start();
    new Thread(D2,"线程2").start();
  }
}

class DeadLockThread1 implements Runnable {
  private Object obj;
  private Object obj1;

  public DeadLockThread1(Object obj, Object obj1) {
    this.obj = obj;
    this.obj1 = obj1;
  }

  @Override
  public void run() {
    synchronized (obj) {   //DeadLockThread1锁定obj对象
      try {
        Thread.sleep(1000);
        synchronized (obj1) { //等待锁定obj1对象,obj对象已被DeadLockThread2锁定
          obj1.getClass();
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

class DeadLockThread2 implements Runnable {
  private Object obj;
  private Object obj1;

  public DeadLockThread2(Object obj, Object obj1) {
    this.obj = obj;
    this.obj1 = obj1;
  }

  @Override
  public void run() {
    synchronized (obj1) {   //DeadLockThread2锁定obj2对象
      try {
        Thread.sleep(1000);
        synchronized (obj) { //等待锁定obj对象,obj对象已被DeadLockThread1锁定
          obj.getClass();
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

보기 방법:


1, [cmd] [jconsole] 입력 ]



2. 테스트 스레드를 선택하고 오른쪽 하단의 [연결]을 클릭한 후 왼쪽 상단의 [스레드]를 선택하고 왼쪽 하단의 [교착 상태 감지]를 선택합니다.

위 내용은 Java의 스레드 교착 상태 문제에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.