[java: Cleaner]-一文述之

Cleaner

Cleaner 是 Java 9 引入的资源清理机制,用于在对象被垃圾回收后自动或手动执行清理操作,替代 finalize(),安全、异步且高效。

java 复制代码
public final class Cleaner {

    final CleanerImpl impl;

    static {
        CleanerImpl.setCleanerImplAccess(new Function<Cleaner, CleanerImpl>() {
            @Override
            public CleanerImpl apply(Cleaner cleaner) {
                return cleaner.impl;
            }
        });
    }
    
    private Cleaner() {
        impl = new CleanerImpl();
    }

	// 创建一个新的 Cleaner,使用默认后台守护线程处理清理任务。
    public static Cleaner create() {
        Cleaner cleaner = new Cleaner();
        cleaner.impl.start(cleaner, null);
        return cleaner;
    }

	// 使用指定线程工厂创建 Cleaner,适合自定义线程配置(如优先级、命名)。
    public static Cleaner create(ThreadFactory threadFactory) {
        Objects.requireNonNull(threadFactory, "threadFactory");
        Cleaner cleaner = new Cleaner();
        cleaner.impl.start(cleaner, threadFactory);
        return cleaner;
    }

	// 注册一个对象与清理任务,当对象被 GC 回收后,后台线程执行 action。返回 Cleanable 可用于提前清理。
    public Cleanable register(Object obj, Runnable action) {
        Objects.requireNonNull(obj, "obj");
        Objects.requireNonNull(action, "action");
        return new CleanerImpl.PhantomCleanableRef(obj, this, action);
    }

	// 表示一次清理任务,调用 clean() 方法可以手动执行清理逻辑,只会执行一次。
    public interface Cleanable {
        void clean();
    }

}
相关推荐
500841 小时前
昇腾 CANN 的五层架构,到底分了哪五层
java·人工智能·分布式·架构·ocr·wpf
摇滚侠2 小时前
Java 零基础全套教程,File 类与 IO 流,笔记 177-178
java·开发语言·笔记
雨落在了我的手上2 小时前
初始java(十):类和对象(⼆)
java·开发语言
莫雪歌3 小时前
Java AI 应用开发实践:基于 Spring Boot 实现 Chat、Memory、RAG 与 Tool Calling
java·aigc
SmartBrain4 小时前
AI全栈开发(SDD):慢病管理系统工程级设计
java·大数据·开发语言·人工智能·架构·aigc
梦想CAD控件4 小时前
网页端对DWG图纸进行预览与批注(CAD轻量化)
java·前端·javascript
老毛肚4 小时前
Spring boot 特性和自写Reids组件
java·spring boot·后端
极光代码工作室4 小时前
基于SpringBoot的课程管理系统
java·springboot·web开发·后端开发
JustNow_Man4 小时前
【opencode】安装使用daytona沙箱插件
android·java·javascript
武子康5 小时前
Java-05 深入浅出 MyBatis动态SQL与参数拼接完全指南
java·spring boot·后端