Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия | |||
| works:programmer:java:weak-reference [2025/11/22 01:26] – Eugene | works:programmer:java:weak-reference [2025/11/22 01:52] (текущий) – Eugene | ||
|---|---|---|---|
| Строка 96: | Строка 96: | ||
| </ | </ | ||
| + | ===== Другие классы работающие в этой теме ===== | ||
| + | **WeakReference** — как память про картинку в кеше | ||
| + | |||
| + | * Хочешь — используй. | ||
| + | * Не хочешь — GC выбросит. | ||
| + | |||
| + | **SoftReference** — как закладка в браузере | ||
| + | |||
| + | * Если есть память — оставлю. | ||
| + | * Если нет — удалю. | ||
| + | |||
| + | **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< | ||
| + | PhantomReference< | ||
| + | |||
| + | executor.scheduleAtFixedRate(() -> { | ||
| + | Reference<?> | ||
| + | if (ref != null) { | ||
| + | System.out.println(" | ||
| + | executor.shutdown(); | ||
| + | } else { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | }, 0, 1, TimeUnit.SECONDS); | ||
| + | } | ||
| + | } | ||
| + | </ | ||