2014-12-15 2 views
6

나는이 질문이 여기에 전에 질문되었을 것이라고 확신하지만, 구글을 검색 한 후에 나는 아무것도 찾을 수 없었다.eclipse에서 stop 버튼을 누르면 finally()가 호출됩니까?

내 상황은 파일에 쓰는 다중 스레드와 인쇄 작성자를 만들고 주 파일을 만들고 try/catch 루프에서 finally 블록 안에있는 인쇄 작성기를 닫는 주 스레드가 있다는 것입니다. 이클립스 내부에서 응용 프로그램을 실행할 때 중지/종료 단추를 누르면 파일에 아무 것도 기록되지 않습니다. 나는 여기서 모든 것을 올바르게하고 있는지 또는 실행이 끝날 때마다 인쇄 작가를 처리하는 더 좋은 방법이 있는지 확인하고자한다. 지옥, 파일에 여러 쓰레드를 쓰는 더 좋은 방법이 있다면, 나는 그 충고를 환영한다. (나는 지금 멀티 쓰레드 프로그래밍에서 상당히 끔찍하다.)

+0

개발하는 동안 모든 쓰기 후에 아마도 플러시 할 수 있습니다. – aioobe

+0

몇 가지 통찰력 (마침내 종료에 관한) : http://stackoverflow.com/questions/1410951/how-does-javas-system-exit-work-with-try-catch-finally-blocks –

+0

@aioobe 생각하지 마세요. 그것의. 프로덕션이 아닌 개인 테스트 용으로 이것을 사용하면됩니다. – CBredlow

답변

2

마지막으로 실행되지 않는 드문 사실이 있습니다. if 중 하나는 다음과 같습니다. System.exit(0). finally을 사용하면 finally 블록의 명령문이 항상 실행된다고 가정합니다.

문제로 인해 스레드가 finally 블록을 아직 실행하지 않았는지 확인하십시오. 필요하면 동기화를 사용해야합니다. 단위 테스트에서 항상 확인하십시오.

2

finally 블록에서 flush()close() 메서드를 호출하기 전에 주 스레드를 다른 스레드에 조인해야하므로 주 스레드는 다른 스레드가 파일을 닫기 전에 파일 쓰기를 마칠 수 있습니다.

관련 문제