You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
📌 인터럽트
❗️문제점
main 스레드가 runFlag=false를 통해 작업 중단을 지시해도, work 스레드가 즉각 반응하지 않는다. ⇒ 로그를 확인해보면 작업 중단 지시 2초 정도 이후에 자원을 정리하고 작업을 종료한다.
이 방식의 가장 큰 문제는 다음 코드의 sleep()에 있다.
Thread.sleep()을 통해 쉬고 있는데, 처리해야 하는 작업이 들어와서 해당 스레드를 급하게 깨우거나, sleep()으로 쉬고있는 스레드에게 더는 일이 없으니 작업종료를 지시할 수 있다. ⇒ 인터럽트 사용
인터럽트를 사용하면 WAITING, TIMED_WAITING 같은 대기 상태의 스레드를 직접 깨워서 작동하는 RUNNABLE 상태로 만들 수 있다.
❗️위 코드에서 한가지 아쉬운 부분
주요 실행 순서
이 코드의 문제점
❗️인터럽트의 목적을 달성하면 인터럽트 상태를 다시 정상으로 돌려두어야 한다.
Thread.interrupted()
cf. 물론 꼭 이것만이 정답은 아니다. 예를들어 너무 긴급한 상황이어서 자원을 정리하지 않고 최대한 빨리 스레드를 종료해야한다면 해당 스레드를 다시 인터럽트 상태로 변경하는 것도 방법이다.
All reactions