주 스레드가 프레임을 만든 후에는 이벤트 디스패처 시스템에서 생성 된 비 데몬 스레드로 인해 JVM이 종료되지 않습니다. 하지만 내 질문은 메인 스레드가 스택을 끝내 자 마자 프레임의 참조가 더 이상 존재하지 않게되어 프레임 객체가 언제든지 가비지 수집 될 수있게된다. 그러나 이것은 왜 일어나지 않는가?주 스레드가 종료 된 경우에도 프레임이 표시되는 방법
답변
참고 : Swing 이벤트 스레드는 비 데몬 스레드이므로 실행 중에 응용 프로그램이 종료되지 않습니다.
하지만
하지만 내 질문은 바로 메인 쓰레드 프레임의 참조가 더 이상 그래서 프레임 객체가 언제든지 가비지 수집이 될 수 없을 것이다 그래서도 사라질 것입니다 스택 것 종료되었습니다입니다.
이것은 GC로 표시된 개체를 만드는 것이 아닙니다. 액티브 쓰레드에는 액티브 참조가 없어야하며 EDT로 인해이 조건이 충족되지 않았습니다.
개체는 더 이상 해당 개체에 대한 참조가 없을 때 가비지 수집 대상입니다. 변수에 포함 된 참조는 일반적으로 변수가 범위를 벗어날 때 삭제됩니다. 또는 변수를 특수 값 null로 설정하여 객체 참조를 명시 적으로 삭제할 수 있습니다. 프로그램은 동일한 객체에 대해 여러 참조를 가질 수 있음을 기억하십시오. 오브젝트에 대한 모든 참조는 오브젝트가 가비지 콜렉션 대상이되기 전에 제거되어야합니다. ref
편집
당신의 상태 코멘트에/내 답변 :
, 이벤트 디스패처 머신은 수행 된 작업을 실행할이 이벤트에 대한 EDT를 생성합니다.
아니요. GUI가 표시되면 바로 스윙 EDT가 만들어집니다. 따라서 GUI에서 버튼을 볼 수 있다면 GUI가 생성되어 실행중인 EDT에 표시됩니다. 버튼을 누르면 EDT가 생성되지 않습니다. 대신 Runnables는 EDT가 처리 할 이벤트 대기열에 대기열에있을 수 있습니다.
이제 실행이 끝난 후 다시 이벤트가 이벤트 대기열로 들어가고, 이제는 동일한 스레드가 두 번 시작될 수 없으므로 머신이 다른 스레드를 시작해야합니다.
다시 아니요. 지속적으로 운영되는 EDT는 하나뿐입니다. new Thread(...).start()
을 통해 새 스레드을 명시 적으로 작성하고 시작하지 않거나 SwingWorker 개체에서 execute()
을 호출하면 새 스레드가 생성되지 않습니다.
- 1. 주 스레드가 종료 될 때 SynchronizationContext는 어떻게됩니까?
- 2. 스레드가 소켓을 열고 주 프로그램이 종료되면 어떻게됩니까?
- 3. Java :이 주 스레드가 새 스레드가 종료 될 때까지 대기하는 방법
- 4. 주 스레드에 종료 방법이없는 이유
- 5. 메인 스레드가 종료 된 다중 스레드가 다른 스레드가 무한대로 실행될 수 있습니다.
- 6. 응용 프로그램이 종료 된 경우에도 경보
- 7. Android 디스플레이 토스트 앱이 종료 된 경우에도
- 8. 앱이 종료 된 경우에도 iBeacons 듣기
- 9. 스레드가 주 창을 호출합니까?
- 10. 주 스레드가 중단되지 않습니다
- 11. 주 스레드가 백그라운드 스레드를 죽이는 것을 방지하는 방법
- 12. 하위 스레드가 완료되면 주 스레드가 진행되지 않습니다.
- 13. 주 스레드가 ThreadPoolExecutor에서 다른 스레드가 완료 될 때까지 대기하는 방법
- 14. 토요일을 주 종료 날짜로 사용하여 Oracle에서 주 종료 날짜를 계산하십시오.
- 15. 스레드가 C#의 주 스레드인지 확인하는 방법
- 16. 현재 스레드가 주 스레드인지 확인하십시오.
- 17. 어떻게 올바르게 종료 스레드가
- 18. 스레드가 완료되면 주 스레드에 알립니다.
- 19. Android 스킵 된 프레임이 주 스레드에서 너무 많이 작동합니다.
- 20. 다른 프로세스에서 시작한 경우에도 시뮬레이션 스레드가 충돌합니다
- 21. 주 스레드가 차단 된 동안 테이블보기 didSelectRowIndexPath 동작을 피하십시오.
- 22. python - 모든 스레드가 연결되기 전에 주 스레드 인쇄가 종료 된 이유
- 23. 스레드 풀이 종료 된 후 주 스레드로 돌아갑니다?
- 24. 앱이 강제 종료 된 경우에도 푸시 알림이 전달됩니다.
- 25. 첫 번째 스레드가 종료 된 후 예약 된 스레드는 무엇입니까?
- 26. 한 번 스레드가 완료되면 주 스레드에게 알립니다.
- 27. 주 응용 프로그램 종료시 정상적으로 스레드 종료
- 28. 주 스레드가 완료되면 어떤 조건에서 C++ 프로그램이 계속됩니까?
- 29. 자식 스레드가 시작된 후에 만 주 스레드가 계속 실행되도록하려면 어떻게해야합니까?
- 30. c 프로그램에서 주 스레드가 종료되면 전체 프로세스가 종료됩니까?
프레임을 만들었지 만 표시하지 않으면 JVM이 주 스레드가 죽으면 곧 종료되어 EDT가 언제 만들어 집니까? – user2594479
@ user2594479 : 스윙 GUI가 렌더링되고 표시되지 않으면 EDT가 시작되지 않습니다. –
답해 주셔서 감사합니다. 나는 의심이 하나 더있다. 버튼을 클릭하면 EDT가 생성되고 실행 된 코드가 실행되므로이 코드를 실행하면 EDT가 종료됩니까?동일한 EDT가 메서드를 다시 실행하거나 새 스레드가 시작될 수 있도록 동일한 버튼을 두 번 클릭한다고 말합니다. – user2594479