HihoBookStudy / EffectiveJava

이펙티브 자바 북스터디입니다.
1 stars 0 forks source link

[아이템 8] finalizer와 cleaner의 차이 #12

Closed zpqmdh closed 3 months ago

zpqmdh commented 3 months ago

아이템 8 41페이지 내용에 따르면,

finalizer 스레드는 다른 애플리케이션 스레드보다 우선 순위가 낮아서 실행될 기회를 제대로 얻지 못한 것이다. (중략) 한편, cleaner는 자신을 수행할 스레드를 제어할 수 있다는 면에서 조금 낫다.

라고 설명되어 있습니다. 하지만 cleaner가 어떻게 자신을 수행하는 스레드를 제어하는지 감이 잡히지 않아 질문합니다. 본인 스레드의 우선순위를 높여 제어할 수 있다는 뜻인지 아니면 다른 방법이 있는지 궁금합니다.

ForteEscape commented 3 months ago

Q.

cleaner가 어떻게 자신을 수행하는 스레드를 제어하는지 감이 잡히지 않아 질문합니다. 본인 스레드의 우선순위를 높여 제어할 수 있다는 뜻인지 아니면 다른 방법이 있는지 궁금합니다.

A.

답을 찾기 매우 힘들었던 질문이었습니다. 스레드의 우선순위를 높이는 방식은 아닙니다. Cleaner는 Class 객체로 자신을 수행할 스레드를 Thread Factory를 생성자에 받아 직접 생성하거나, 내부에 존재하는 Thread Factory를 사용하여 메모리 회수를 진행하는 방식입니다. java 17 document - Cleaner

Cleaner 객체는 자신을 실행시키는 스레드를 데몬 스레드로 설정하고 수행합니다. 데몬 스레드는 자체적으로 낮은 우선순위를 가지기 때문에 우선순위를 제어하는 것은 아닙니다.

책에서 전달하고 싶었던 내용은 이런 내용입니다.

아마 이 부분을 책에서 스레드를 통제할 수 있다 라고 서술하고 있는 것으로 생각됩니다.

zpqmdh commented 3 months ago

Thread Factory라는 개념을 잘 몰라서 말씀해주신 내용을 다 이해하기에는 조금 어렵네요.. ㅜ_ㅜ 하지만 다른 이슈에서 들어주신 finalize attack 예시 덕분에 cleaner의 예외 추적에 대해 이해가 되었습니다! 감사합니다~!!!