IE盒子

搜索
查看: 86|回复: 0

Java Cleaner 怎样实现在 gc 时清理释放资源?

[复制链接]

3

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-4-10 10:30:51 | 显示全部楼层 |阅读模式
这是JDK11 Cleaner 官方文档地址: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ref/Cleaner.html ,文档中的使用示例如下图


Cleaner主要作用是用一个线程,在垃圾回收时清理资源。
我知道使用 try(){} 这样的 try-with-resource 结构可以将实现了 AutoCloseable 接口的类放入 try() 括号中, 这样在 try 语句结束后自动调用 close() 释放资源。
而 Cleaner 与之不同的是,可以在垃圾清理 gc 发生时进行清理线程,而不是非要等到try块结束。这样可以在try中发生死锁或try块过长的时候进行清理。
我实现了如下代码:
import java.io.Closeable;
import java.io.IOException;
import java.lang.ref.Cleaner;

public class Test {
    public static void main(String[] args) {
        try{
            for(int i=0; i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表