Разве это не должно работать? Слабое обращение не очищается от GCJAVA

Программисты JAVA общаются здесь
Anonymous
Разве это не должно работать? Слабое обращение не очищается от GC

Сообщение Anonymous »

class RandomMain {

static class MyObj{
public final int i;
MyObj(int i) { this.i = i;}
}

static MyObj m = null;

public static void main(String[] args) throws Exception {
m = new MyObj(1);
final WeakReference a = new WeakReference(m);
final Thread thread = new Thread(() -> {
int i = 0;
while(a.get() != null) {
try {
System.out.println("# ("+ (i++) +"): a.get() != null");
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
thread.start();
new Thread(() -> {
try {
Thread.sleep(2500);
System.out.println("# Will clear static reference to object (m = null)");
m = null;
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).start();

thread.join();
System.out.println("# Thread: yo' about to die, but your sons will seat at the head of all tables, my boy!");
}
}
< /code>
Если вы запустите этот код, он будет работать навсегда. Для меня - по крайней мере, это так. Это не отказывается от ссылки. Насколько я понимаю, метод get () должен вернуть NULL после того, как статическая ссылка была очищена, верно?
Спасибо за чтение.

Подробнее здесь: https://stackoverflow.com/questions/794 ... ared-by-gc

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