java의 교착 상태는 둘 이상의 스레드가 영원히 차단되는 프로그래밍 상황입니다. Java 교착 상태 상황은 적어도 두 개의 스레드와 두 개 이상의 리소스로 발생합니다. 여기에 자바 교착 상태 시나리오를 일으킬 수있는 간단한 프로그램을 작성한 다음 분석하는 방법을 볼 수 있습니다. 10 Java 멀티스레딩 및 동시성 권장 사항 주문 부과는 “순환 대기” 조건을 제동하여 교착 상태를 방지하는 예입니다. 아시다시피 교착 상태가 발생하려면 네 가지 조건이 충족되어야 합니다 :1) 상호 제외2) 보류 및 Wait3) 순환 대기는 교착 상태를 피하기 위해 이러한 조건을 깰 수 있지만 순환 대기를 중단하는 것은 종종 쉽습니다. 그러나 일관된 순서를 사용하더라도 명령이 미리 정의되지 않은 경우( 즉, 다음 리소스의 ID가 첫 번째 리소스를 획득한 후에 오는 경우) 교착 상태를 방지할 수 없습니다. 이는 Java뿐만 아니라 다중 스레딩 및 동시성을 지원하는 모든 프로그래밍 언어에 해당합니다. 자바 응용 프로그램에서 교착 상태의 경우 당신은 그것을 조사하기 위해 다음 을 수행 할 수 있습니다 :1) 윈도우 머신에서 Ctrl + Break를 눌러 자바 응용 프로그램의 콘솔에서 스레드 덤프를 인쇄. 이 스레드 덤프를 분석하여 교착 상태의 원인을 알 수 있습니다.2) 리눅스와 Solaris 컴퓨터에서 SIGQUIT를 보내 스레드 덤프를 취하거나 Java 응용 프로그램 프로세스 ID로 -3을 죽일 수 있습니다. 자바 6 이후부터 Jconsole 유틸리티는 중단 자바 프로세스에 부착하고 교착 상태를 찾을 수 있습니다.

우리는 또한 cmd에이 프로그램을 실행 하 여 교착 상태를 감지할 수 있습니다. 스레드 덤프를 수집해야 합니다. 수집하는 명령은 OS 유형에 따라 다릅니다. 우리는 윈도우와 자바 8을 사용하는 경우, 명령은 jcmd $PID Thread.print 우리는 jps 명령을 실행하여 PID를 얻을 수 있습니다. 위의 프로그램에 대한 스레드 덤프는 다음과 같습니다 자바에서 교착 상태를 감지하는 방법에 대해 이야기하는 경우 교착 상태에 있는 모든 스레드의 ID를 반환하는 findDeadLockthreads()라는 메서드를 제공하는 ThreadMXBean을 사용하여 칼이 있습니다. 모니터를 해제하거나 잠금을 획득하기 위해 서로 를 얻습니다. 다음은 코드입니다 :ThreadMXBean 스레드MBean = 관리공장.getThreadMXBean(); threadMBean.find교착 상태 스레드(); 안녕하세요 Bhavya Shah, 당신은 String.class 또는 Integer.class를 사용하거나 다른 클래스에서 클래스 리터럴을 사용하는 것이 좋습니다, 절대적으로 정확합니다. 사실, 나는 또한 자바 동기화에 대한 내 기사에서이 사실을 지적했다. 나는 초보자가 이것을 있는 것처럼 선택할 수 있다는 사실에 완전히 동의하며, 앞으로 예제의 품질을 향상시킬 수 있기를 바랍니다.

다른 언급 된, 사용 하 여 개체 잠금 = 새 개체(); 아마도 Object 클래스를 가장 잘 사용하는 것 중 하나일 것입니다. 다시 한번, 귀하의 의견에 감사드립니다. “Java에서 교착 상태가 무엇인지”또는 “Java에서 교착 상태를 해결하는 방법”에 대답하려고하는 데 핵심은 Java에서 스레드 안전, 교착 상태가없는 동시 코드를 작성하는 것입니다. 공통 자바 패턴에 동시성 및 다중 스레딩을 적용하면 Java에서 교착 상태를 방지하는 방법을 배우고 싶습니까? 교착 상태를 피하는 문제는 인기있는 Java 인터뷰 질문 중 하나이며, 멀티 스레딩은 주로 후속 질문이 많은 고위 급 인터뷰에서 주로 묻습니다. 질문은 매우 기본적인 것처럼 보이지만, 자바 개발자의 대부분은 당신이 더 깊이 가기 시작하면 붙어 얻을. Java에서 교착 상태는 최소 두 개의 스레드가 다른 리소스에 대한 잠금을 잡고 있으며 둘 다 다른 스레드의 리소스가 작업을 완료하기를 기다리는 상황입니다. 또한 보유한 리소스에 대한 잠금을 그대로 둘 수는 없습니다. 예를 들어 프로그래밍 방식으로 Java에서 교착 상태를 만드는 방법을 배웁니다.

또한 교착 상태를 감지하고 소스 코드에서 교착 상태를 해결하는 방법도 알아봅니다. 문제 해결 도구와 스레드 덤프 를 분석하는 프로세스에 대해 배우고 싶다면 Uriah Levy의 Pluralsight에서 이 Java 스레드 덤프 분석 과정을 살펴보는 것이 좋습니다. Java 스레드 덤프에 대해 자세히 알아보고 인기 있는 고급 문제 해결 도구에 익숙해지는 고급 연습 과정입니다. 이전 질문에 대답하면 Java에서 교착 상태가 발생하는 코드를 작성하는 방법을 물어볼 수 있습니다.