Java : Cleaner.Cleanable - API使用例
Cleaner.Cleanable (Java SE 21 & JDK 21) の使用例まとめです。
 だいたいのメソッドを網羅済みです。
 API仕様書のおともにどうぞ。
概要
Cleanableは、Cleanerに登録されているオブジェクトとクリーニング・アクションを表します。
Cleanable インタフェースを使うと、Cleaner に登録されたアクションを、オブジェクトのクリアを待たずに実行できます。
class Foo {
}
final var foo = new Foo();
final var cleaner = Cleaner.create();
final var cleanable = cleaner.register(foo, () -> {
    System.out.println("Clean!");
    final var current = Thread.currentThread();
    System.out.printf("  (thread id = %d, daemon = %b)%n",
            current.threadId(), current.isDaemon());
});
System.out.println("-- start -- (thread id = " +
        Thread.currentThread().threadId() + ")");
cleanable.clean();
// 結果
// ↓
//-- start -- (thread id = 1)
//Clean!
//  (thread id = 1, daemon = false)
メソッド
void clean ()
クリーニング可能なものの登録を解除し、クリーニング動作を呼び出します。
class Foo {
}
final var foo = new Foo();
final var cleaner = Cleaner.create();
final var cleanable = cleaner.register(foo, () -> {
    System.out.println("Clean!");
    final var current = Thread.currentThread();
    System.out.printf("  (thread id = %d, daemon = %b)%n",
            current.threadId(), current.isDaemon());
});
System.out.println("-- start -- (thread id = " +
        Thread.currentThread().threadId() + ")");
cleanable.clean();
// 結果
// ↓
//-- start -- (thread id = 1)
//Clean!
//  (thread id = 1, daemon = false)




