Java의 동기화 된 메소드에서 대기중인 스레드에 대한 기본 시간 초과가 있습니까? 내 애플 리케이션의 일부 스레드가 예상대로 완료되지 않습니다. 스레드가 시간 초과로 인해 죽었는지 확인하려면 어쨌든 있습니까?Java의 동기화 된 메소드에서 대기중인 스레드에 대한 시간 초과가 있습니까?
답변
동기화 대상을 기다리고있는 메서드는 죽지 않아야합니다. 그러나 잘못되었을 때 ("영원히"와 같이) 오랜 시간 기다릴 수 있습니다. 아마도 귀하의 프로그램은 결코 자원에 대한 잠금을 해제하지 않습니다?
JLS은 synchronized
섹션에 시간 제한을 지정하지 않습니다. 실행중인 스레드가 잠금을 소유하고 있지만 그것은 단지
를 언급, 다른 스레드는 잠금을 획득하지 않을 수 있습니다.
join() 메소드에서 시간 초과를 설정하여 영원히 기다리지 않도록 할 수 있습니다.
필자는 java.util.concurrent 패키지를보고 자신의 상황에 도움이되는 새로운 기능이 추가되었는지 확인하려고합니다.
Brian Goetz의 "Java Concurrency In Practice"도 좋습니다. (다시 직접 읽어야합니다.)
좋은 점 : 두 번째 스레드가 서로를 기다리고 있음을 의미하는 "교착 상태"라는 의미입니다. 타임 아웃이 발생하면 "교착 상태"라는 용어는 존재하지 않습니다. – Pindatjuh
duffymo - 하나의 스레드가 다른 스레드를 시작하고 두 번째 스레드가 첫 번째 스레드로 진행 상황을보고해야하지만 두 번째 스레드가 완료되기 전에 첫 번째 스레드가 종료되면 어떤 일이 발생할 것으로 예상됩니까? – MalcomTucker
잘 모르겠습니다. 그것은 양방향 통신이되어야하는 것처럼 들리지만 그렇지 않습니다. 여기서 콜백이 필요합니다. 그래서 원시 java.lang.Thread를 넘어서 java.util.concurrent 패키지를 살펴 보는 것이 좋습니다. 새로운 기능이 적용될 수 있기 때문입니다. – duffymo
자바 스레드는 갑자기 죽지 않습니다. 진행 중이 아니거나 (잠금 또는 무한 루프 또는 이와 유사한 방식으로 차단됨) 예외가 발생하고 처리되지 않으면 예외가 최상위 수준으로 전파 될 때 스레드의 실행이 중지됩니다. 예외가 발생하면 예외를 인쇄해야합니다 System.err에 대한 스택 추적).
응용 프로그램이 교착 상태에있는 경우 이유를 찾는 한 가지 방법은 스레드 덤프를 만드는 것입니다. JVM은 단순한 교착 상태를 감지 할 수도 있는데,이 경우 스레드 덤프에이를보고합니다.
kill -QUIT <pid>
을 실행하고 Windows에서 콘솔 창에 Ctrl + Break
을 입력하여 Linux에서 스레드 덤프를 생성 할 수 있습니다. 또는 더 단순한 경우 VisualVM, StackTrace 또는 이와 유사한 도구를 사용하십시오.
kill -3을 사용하여 스레드 덤프를 확인한 다음 문제가있는 스레드가 무엇인지 확인하는 것이 좋습니다.
- 1. 자바의 동기화 된 메소드에서 도움이
- 2. nvidia gpus에 커널에 대한 시간 초과가 있습니까?
- 3. Java의 동기화 된 메서드
- 4. Java의 동기화 된 메소드의 단점
- 5. LinkedBlockingQueue에 add()가 대기중인 스레드에 통지합니까?
- 6. 캐치 시간 초과가 ASP에서 만료되었습니다
- 7. URLLoader.load 연결에서 시간 초과가 무엇입니까?
- 8. Java의 스레딩 및 동기화
- 9. ColdFusion의 예약 된 작업에는 기본 시간 초과가 있습니까?
- 10. Eunit 시간 초과가 작동하지 않습니다.
- 11. SQL : 쿼리 시간 초과가 만료되었습니다.
- 12. 세션 시간 초과가 Asp.Net에서 연장됩니다.
- 13. COM Interop에 시간 초과가 발생했습니다.
- 14. PHP에서 시스템 ($ cmd) 시간 초과가
- 15. MySQL 잠금 대기 시간 초과가
- 16. 저장소를 복제하면 시간 초과가 발생합니다.
- 17. 행을 삭제하면 잠금 시간 초과가 발생합니다.
- 18. MultiThreadedHttpConnectionManager에서 대기중인 스레드에 의한 높은 바람둥이 스레드 수 ConnectionPool
- 19. Android : 삭제 된 스레드에 대한 SMS 관찰
- 20. 세션 시간 초과가 제대로 작동하지 않습니다.
- 21. return 키워드는 Java의 void 메소드에서 무엇을합니까?
- 22. 동기화 JS + PHP 시간
- 23. 네트워크 드라이브에 시간 초과가 있는지 확인하십시오. #
- 24. 연결을 시도 할 때 연결 시간 초과가
- 25. GMT와 현지 시간 동기화
- 26. Java의 다른 메소드에서 인스턴스 변수에 액세스
- 27. Infinity Java의 시간 값은?
- 28. 특정 페이지에서 javax.servlet.http.HttpSession의 시간 초과가 발생하지 않도록하십시오.
- 29. valgrind에서 프로그램을 실행할 때 연결 시간 초과가
- 30. 데이터 저장소 충돌 시간 초과가 너무 깁니다.
감사합니다. 교착 상태가 있다고 생각하지 않습니다. 그러나 그 원인이 될 수 있습니다 .. – MalcomTucker