Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
works:programmer:java:weak-reference [2025/11/22 01:26] Eugeneworks:programmer:java:weak-reference [2025/11/22 01:52] (текущий) Eugene
Строка 96: Строка 96:
 </code> </code>
  
 +===== Другие классы работающие в этой теме =====
 +**WeakReference** — как память про картинку в кеше
 +
 +  * Хочешь — используй.
 +  * Не хочешь — GC выбросит.
 +
 +**SoftReference** — как закладка в браузере
 +
 +  * Если есть память — оставлю.
 +  * Если нет — удалю.
 +
 +**PhantomReference** — как уведомление из морга
 +
 +  * «Поступил труп, можешь приходить и забирать свои ресурсы».
 +
 +===== Немножко PhantomReference =====
 +
 +Таймер привязанный к объекту, живущий через PhantomReference.
 +
 +<code java>
 +import java.lang.ref.*;
 +import java.util.concurrent.*;
 +
 +public class PhantomTimer {
 +    private final ScheduledExecutorService executor =
 +            Executors.newSingleThreadScheduledExecutor();
 +
 +    public void start(Object target) {
 +        ReferenceQueue<Object> queue = new ReferenceQueue<>();
 +        PhantomReference<Object> phantom = new PhantomReference<>(target, queue);
 +
 +        executor.scheduleAtFixedRate(() -> {
 +            Reference<?> ref = queue.poll();
 +            if (ref != null) {
 +                System.out.println("Object collected. Stopping timer.");
 +                executor.shutdown();
 +            } else {
 +                System.out.println("Object alive.");
 +            }
 +        }, 0, 1, TimeUnit.SECONDS);
 +    }
 +}
 +</code>
  • works/programmer/java/weak-reference.txt
  • Последнее изменение: 2025/11/22 01:52
  • Eugene