阅读有关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()
? 最佳答案
清洁器具有关联的线程。线程是有限的本地资源。因此,目标是通过不创建比所需数量更多的清理器来限制创建的线程数量。
您发布了引用示例。如果这还不够,您需要问一些更具体的问题。