Использование java.lang.ref.cleaner в качестве альтернативы объекту.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование java.lang.ref.cleaner в качестве альтернативы объекту.

Сообщение Anonymous »

мне нужно очистить ресурсы, выделенные по вызову JNI. Это легко сделать, переопределив object.finalize () Метод. Поскольку этот метод устарел, начиная с Java 9, я пытаюсь достичь того же самого, используя новый класс java.lang.ref.cleaner .

Код: Выделить всё

import java.lang.ref.Cleaner;
import java.lang.ref.WeakReference;

public class ToBeCleaned {

private static Cleaner cleaner = Cleaner.create();

public ToBeCleaned() {
cleaner.register(this, new CleanRunnable(this));
}

void cleanUp () {
// do cleanup
}

static class CleanRunnable implements Runnable {
// It has to be weak reference, otherwise ToBeCleaned instance
// would never be eligible for GC
private WeakReference toBeCleanedWeakReference;

CleanRunnable(ToBeCleaned  toBeCleaned) {
this.toBeCleanedWeakReference = new WeakReference(toBeCleaned);
}

@Override
public void run() {
toBeCleanedWeakReference.get().cleanUp();
}
}
}
Мой вопрос: это правильный подход?

Подробнее здесь: https://stackoverflow.com/questions/644 ... t-finalize
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»