java的Cleaner

java的Cleaner简单学习

简述

与finalize(终结)方法类似,都是对资源的释放。那为什么这里讲述cleaner呢,因为终结方法存在严重的安全当构造对象途中出现异常,本应该被回收,可是finalizer attack会将该对象的引用记录存在一个静态域,阻止该对象被回收,且在后期调用该对象的方法。

用处

当忘记释放资源的时候,可以作为最后的安全网来释放资源。

案例分析

public class Room implements AutoCloseable{

    private static class State implements Runnable{
        int numJunkPiles ;

        State(int numJunkPiles){
            this.numJunkPiles = numJunkPiles;
        }

        @Override
        public void run() {
            System.out.println("Cleaning room");
            numJunkPiles = 0;
        }
    }

    private final State state ;

    private final Cleaner cleaner ;

    public Room(int numJunkPiles){
        state = new State(numJunkPiles);
        cleaner = Cleaner.create(this,state);
    }

    @Override
    public void close() throws Exception {
        cleaner.clean();
    }


    public static void main(String[] args) throws Exception {
        try(Room room = new Room(11) ){
            System.out.println("Peace out");
        }
    }
}

这段代码中,首先Room在try-catch-resource中初始化,在初始化时,创建了清除器。接着try-catch-resource会调用close()方法去执行clean()操作,其中clean源码如下图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值