> Java > java지도 시간 > 본문

Java에서 InterruptedException 오류를 잡는 방법

WBOY
풀어 주다: 2023-04-18 20:10:34
앞으로
880명이 탐색했습니다.

Catch InterruptedException Error

아래 코드 조각을 확인하세요:

public class Task implements Runnable {
	private final BlockingQueue queue = ...;
	@Override
	 public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			String result = getOrDefault(() -> queue.poll(1L, TimeUnit.MINUTES), "default");
			//do smth with the result
		}
	}
	T getOrDefault(Callable supplier, T defaultValue) {
		try {
			return supplier.call();
		}
		catch (Exception e) {
			logger.error("Got exception while retrieving value.", e);
			return defaultValue;
		}
	}
}
로그인 후 복사

코드의 문제는 중단된 플래그가 복원되지 않기 때문에 큐에서 새 요소를 기다리는 동안 스레드를 종료할 수 없다는 것입니다. :

1. 코드를 실행하는 스레드가 중단되었습니다.
2.BlockingQueue # poll() 메서드는 InterruptedException을 발생시키고 인터럽트 플래그를 지웁니다.
3.마크가 지워졌으므로 while의 루프 조건(!Thread.currentThread().isInterrupted())이 true로 판단됩니다.

이 동작을 방지하려면 메서드가 명시적으로(InterruptedException을 발생시키도록 선언하여) 또는 암시적으로(원시 예외를 선언/발생하여) 발생하는 경우 항상 InterruptedException 예외를 포착하고 인터럽트 기호를 다시 시작하세요.

아아아아

위 내용은 Java에서 InterruptedException 오류를 잡는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿