2012-01-11 3 views
4

데몬 스레드는 응용 프로그램 주 스레드가 종료 된 후에 VM에 의해 중지되므로 항상 더 나은 것으로 보입니다. 일부 작업을 인터럽트 할 수없는 경우 이외에 비 데몬 스레드를 사용하는 다른 이유가 있습니까? 감사합니다. .왜 Java에서 비 데몬 스레드를 사용해야합니까?

+0

데몬 스레드는 실행중인 다른 스레드에 서비스를 제공합니다. 실행중인 스레드가 항상 서비스를 필요로하는 것은 아닙니다. –

+0

GUI 요소를 화면에 던져 넣으면 비 데몬'Thread'가 생깁니다. 또한 방해가 될 수 있습니다. –

+2

FYI : 실제로는 주 스레드가 아닙니다. 비 데몬 (non-daemon) 기술 용어 인 사용자가없는 즉시 JVM이 종료됩니다. –

답변

1

VM은 실행 중간에 데몬 스레드를 중지 할 수 있으며 영구 데이터가 손상 될 수 있습니다.

스레드가 안전하게 죽을 때를 더 많이 제어해야하는 경우 데몬이되지 않도록하십시오.

6

귀하의 모든 main이 관련이있다가 부트 스트랩 및 HTTP 리스너 스레드, 수용 스레드, 파일 시스템 스캔 스레드, RMI 스레드를 시작하는 것입니다 (예를 들어, 서블릿 컨테이너) 서버를 작성하는 등

후 부트 스트랩이 완료되면 모든 것이 비동기 적으로 발생하므로 main은 더 이상 필요하지 않습니다. 이 경우 모든 필수 스레드는 이되어야하므로 데몬이 아니므로 main 메서드를 사용합니다.

스윙 (데스크톱 프로그래밍)에서도 main의 유일한 요구 사항은 기본 창 (JFrame)을 초기화하는 것입니다. 나머지는 Swing 리스너 스레드 (EDT)와 다양한 백그라운드 스레드에서 발생합니다.

2

다른 스레드가 종료되기 때문에 중지하고 싶지 않은 작업을 수행 할 때마다 비 데몬 스레드를 사용합니다. 스레드의 유일한 목적이 다른 스레드를 지원하는 것이라면 데몬 스레드를 사용하는 것이 좋습니다.

주 스레드가 종료 될 때 종료하려면 System.exit()을 호출하면됩니다. 많은 응용 프로그램은 기본 스레드를 유지하지 않으며 모든 작업은 시작 스레드에 있습니다.

4

실제로 작업을 수행하는 동안 JVM을 종료하지 않으려면 실제로 자연스럽게 완료되어야하는 ("실행"메소드는 그대로두고) 모든 스레드가 이 아닌은 데몬 스레드 여야합니다.

이것은 시작한 모든 스레드에 적용되며 자연스럽게 종료 될 것으로 예상됩니다.

일반적으로 데몬 스레드는 규칙이 아니라 예외입니다.

4

큰 차이점은 데몬 스레드가 종료되는 방법입니다. JVM은 단지 그것들을 멈춘다.

  • finally 블록 당신은 같은 파일로 알려진 상태로 남아있을 필요가 것들에 대한 데몬 스레드를 사용하지 않으려는
  • 스택

를 풀려하지 않는 실행되지 않습니다 I/O, 데이터베이스 트랜잭션 등.

관련 문제