프로그래밍 방식으로 Java 교착 상태를 생성하는 방법 및 교착 상태를 분석하는 방법

게시 됨: 2013-07-03

Crunchify의 Java 스레드 잠금 예제

교착 상태는 둘 이상의 스레드가 영원히 차단되는 프로그래밍 상황이며, 이 상황은 최소 두 개의 스레드와 둘 이상의 리소스에서 발생합니다.

여기서는 교착 상태 시나리오를 유발하는 간단한 프로그램을 작성한 다음 이를 분석하는 방법을 살펴보겠습니다.

다음은 간단한 Java 예제입니다.

산출:

위의 예와 같이 앱이 중단되는 동안 스레드 덤프를 가져와 교착 상태에 있는 스레드를 볼 수 있습니다.

예를 들어, Mac에서 Ctrl-\ 를 사용하거나 단순히 jstack 및 프로세스 ID를 사용하여 교착 상태가 어디에 있는지 매우 명확하게 만드는 스레드 덤프를 얻을 수 있습니다.

이 예에서 스레드 덤프는 다음과 같습니다.

여기에서 BLOCKED 및 WAITING threads => Deadlock 상황을 알 수 있습니다. 다음 예제에서는 프로그래밍 방식으로 위의 스레드 덤프를 생성하는 간단한 Java 프로그램을 제공합니다.