Timer를 프로세스 인터럽트 메커니즘으로 사용하고 있습니다.Timer 및 TimerTask를 사용할 때의 Java 스레드 실행 순서
T0은 : 다음 논리 흐름은 T0에서 새로운 타이머를 생성하고 T2에서 실행할 새로운 타이머 태스크를 예약 (1 번째 작업 지연, 작업이 매우 간단 - 세트 플래그 변수)
T1 : 주요 호출 스레드에서 5 초
잠T2가 : 타이머 스레드에서, 작업이 실행
T5 : 수면
T6 완료 : 취소 타이머 및 예약 된 작업을
이 코드는 내 Windows 및 Ubuntu 개발 환경에서 완벽하게 작동합니다. 내 SLES 10 서버를 구축 동일한 코드를 실행할 때, 기록이 실행 순서를 나타냅니다
T0 : 타이머와 타이머 작업은 T2에서
T1을 실행하기 위해 작성됩니다 메인 스레드 5 초
잔다T5는 : 타이머
T7 취소 : 작업이
을 수행 할 수 사람의 서비스 메인 스레드는T6가 깨어 나면 이것이 일어나는 이유에 대한 설명? 매우 감사합니다.
어떤 로깅 메커니즘을 사용하고 있습니까? 로그가 올바르게 플러시되지 않을 수도 있습니다. – Tom
log4j를 사용하고 있습니다. 나는 각 단계마다 System.currentTimeMillis를 사용하여 타임 스탬프를 기록하므로 로그 출력의 순서가 범인이 아니기를 바랍니다. – Chrom