Java에서 음성 인식 프로그램을 구현하려는 노력의 일환으로 실제 음성 인식 코드를 별도의 스레드에 구현했습니다. 주 스레드는 GUI 인터페이스를 처리하고 단어가 식별되면 음성 인식 스레드로부터 지속적인 업데이트를받습니다.스레드를 중지하고 정리 코드를 실행하는 가장 안전한 방법은 무엇입니까
사용자가 주 스레드의 GUI에서 종료 단추를 클릭하면이 스레드가 즉시 일부 정리 코드를 실행하고 종료됩니다. 내가 while 루프에 의존
public class VoiceRecognitionCore extends SwingWorker<List<String>, String>
{
//Variables and things here
@Override
public List<String> doInBackground() throws VoiceRecognitionException
{
//Code here
while(continueVoiceRecog == true)
{
//More code
Result result = recog.recognize();
//More code
}
}
}
는 지속적으로 사용자가 "종료"를 클릭하면 메인 스레드으로 false로 설정됩니다 continueVoiceRecog의 상태를 확인 :
나는 현재 다음있다.
현재 문제는 코드가 recog.recognize() 메소드 내에 영구히있을 수 있기 때문에 while 체크로 다시 돌아 가지 않을 것입니다. 이것은 항상 일시적인 해결책으로 의도되었다는 점에 유의해야합니다.
DoInBackground()를 InterruptedException을 catch하도록 확장하려고하며 사용중인 리소스를 할당 해제하기 위해 정리 메소드를 호출하는 스레드 인터럽트를 사용합니다.
이 시나리오에서 가장 안전한 방법은 무엇입니까? 그것이 제가 제안한 것이라면, 내가 알아야 할 잠재적 인 문제가 있습니까?