단일 스레드에 sleep() 사용
Java에서는 wait() 및 sleep()을 사용하여 스레드 동기화를 처리합니다. 그러나 다른 스레드를 실행하면서 단일 스레드에서 sleep()을 활용하려고 하면 문제가 발생할 수 있습니다.
문제:
한 스레드에서 sleep()을 호출할 때 , 두 스레드 모두 지정된 기간 동안 실행을 일시 중지한 것으로 보입니다. 이러한 동작이 발생하는 이유는 무엇입니까?
답변:
Swing GUI로 작업할 때 기본 스레드와 다른 스레드와 구별되는 고유한 스레드가 생성을 담당합니다. 이 스레드를 EDT(이벤트 디스패치 스레드)라고 합니다. EDT에서 sleep()이 호출되면 호출이 완료될 때까지 실행이 중단됩니다.
EDT에서 GUI 이벤트 처리가 발생하므로 이 스레드의 모든 절전 작업은 이벤트 처리를 일시 중지하여 UI가 절전 모드까지 정지된 것처럼 보입니다. ()가 끝납니다.
해결책:
EDT 또는 sleep()으로 인해 의도하지 않은 실행이 차단되는 스레드에서 Thread.sleep()을 사용하지 마세요. 또는 다음 옵션을 고려하십시오.
참고:
Java 1.6 이상의 경우 EDT에서 작업을 지연시키기 위해 Swing Timer 및 Swing Worker가 선호되는 옵션입니다. 이전 Java 버전의 경우 TimerTask 또는 Thread를 SwingUtilities/EventQueue#invokeXX 블록과 함께 사용하여 UI 응답성을 보장할 수 있습니다.
위 내용은 이벤트 디스패치 스레드에서 `sleep()`을 호출하면 GUI가 정지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!