阅读有关Java 9的Cleaner类的信息,我在同一页面中找到了以下示例:

public class CleaningExample implements AutoCloseable {
    // A cleaner, preferably one shared within a library
    private static final Cleaner cleaner = <cleaner>;

    static class State implements Runnable {

        State(...) {
            // initialize State needed for cleaning action
        }

        public void run() {
            // cleanup action accessing State, executed at most once
        }
    }

    private final State;
    private final Cleaner.Cleanable cleanable

    public CleaningExample() {
        this.state = new State(...);
        this.cleanable = cleaner.register(this, state);
    }

    public void close() {
        cleanable.clean();
    }
}

在第二行中有一条评论说:



为什么最好在一个库中有一个共享的Cleaner(静态)?

有没有人有一个很好的例子说明如何使用Cleaner而不是覆盖finalize()

最佳答案



清洁器具有关联的线程。线程是有限的本地资源。因此,目标是通过不创建比所需数量更多的清理器来限制创建的线程数量。



您发布了引用示例。如果这还不够,您需要问一些更具体的问题。

10-05 17:47