응용 프로그램의 폴러 스레드 중 하나가 돌아 오지 않는 경쟁 조건을 디버깅하려고 시도하면 향후 폴러가 예약되지 않을 수 있습니다. 추상적 인 관점에서 문제를 포착하면서 비즈니스 로직을 숨기려면 여기에 코드 경로가 있습니다.ThreadPoolExecutor가 응답하지 않음
원격 서버에서 리소스 Y의 일부 상태 X를 업데이트해야합니다. 우리는 리소스 상태를 변경하고 변경의 부작용으로 X를 업데이트하는 리소스 관리자를 가지고 있습니다. 이 관리자는 리소스를 지속적으로 폴링하고 리소스가 업데이트되었다고 생각하면 ThreadPoolExecutor
을 사용하여 작업을 수행합니다. 이 스레드 풀 실행 프로그램은 적당한 크기의 블로킹 큐를 가지고 있지만 상당히 적은 수의 최대 스레드를 가지고 있습니다. 스레드 덤프의 중단 자체는 invokeAll 호출에서 발생합니다. (다른 것들 중에서도)
이 풀 실행자의 코어 /).
invokeAll은 우리가 기다리는 미래를 반환하기 때문에 executor가 사용하는 블로킹 데이터 구조가 invokeAll을 통해 전달 된 작업을 수용 할만큼 충분히 크지 만 사용 가능한 스레드가 충분하지 않더라도 invokeAll이 중지됩니까? 다른 사용자가 몇 가지 코드 (심지어 의사 코드), 그리고 "상태가 X"무엇을 명확하게 이해하고, 무엇을 "자원 Y"없이 지적했듯이
는
일부 코드를 게시하십시오. – raffian