Cleaner — 객체 정리 작업 관리 클래스

Cleaner — 객체 정리 작업 관리 클래스

Cleaner는 객체 참조 집합과 그에 대응하는 정리 작업(cleaning action)을 관리해요. 정리 작업은 객체가 팬텀 도달 가능(phantom reachable) 상태가 되었다는 알림을 받은 후에 실행되도록 등록돼요. Cleaner는 도달 가능성 변화를 감지하기 위해 PhantomReferenceReferenceQueue를 사용해요. 각 Cleaner는 독립적으로 동작하며, 대기 중인 정리 작업을 관리하고, 더 이상 사용되지 않을 때 스레딩과 종료를 처리해요.

출처: Java API Reference

본문

객체 참조와 정리 작업을 등록하면 Cleanable을 반환해요. 가장 효율적인 사용법은 객체가 닫히거나 더 이상 필요 없을 때 clean 메서드를 명시적으로 호출하는 거예요. 정리 작업은 객체가 팬텀 도달 가능이 되었을 때 최대 한 번 호출되는 Runnable이에요 (이미 명시적으로 정리되었다면 제외). 정리 작업이 등록된 객체를 참조해서는 안 돼요. 그렇게 하면 객체가 팬텀 도달 가능이 되지 않아 정리 작업이 자동 호출되지 않아요. 정리 작업의 실행은 해당 Cleaner에 연결된 스레드가 수행해요.

public static Cleaner create()

Cleaner를 만들어요. Cleaner는 팬텀 도달 가능한 객체를 처리하고 정리 작업을 실행할 전용 스레드를 시작해요. Cleaner 객체에 도달 가능한 참조가 없게 되면 정리 작업이 계속 실행되도록 보장하기 위해 스레드가 계속 실행돼요.

public static Cleaner create(ThreadFactory threadFactory)

주어진 ThreadFactory를 사용해 정리 작업을 실행할 새 스레드를 만드는 Cleaner를 생성해요. 각 Cleaner는 자체 스레드를 생성하며, 정리 작업이 실행되는 동안 스레드가 종료되면 새로운 스레드가 시작돼요.

public Cleaner.Cleanable register(Object obj, Runnable action)

정리 작업 action을 등록하고 Cleanable을 반환해요. obj가 팬텀 도달 가능이 되면 action이 실행돼요. 반환된 Cleanableclean()을 호출하면 등록된 정리 작업을 즉시 실행하고 이후에는 실행하지 않아요.

더 알아보기 (Learn more)