Из javadoc
Каждый поток содержит неявную ссылку на свою копию локальной локальной переменной, если поток жив, и экземпляр ThreadLocal доступен; после того, как поток исчезнет, все его копии локально-потоковых экземпляров подлежат сборке мусора (если нет других ссылок на эти копии).
из этого, кажется, что объекты, на которые ссылается переменная ThreadLocal, собираются мусором только тогда, когда поток умирает. Но что, если переменная ThreadLocal a
больше не ссылается и подлежит сбору мусора? Будет ли объект ссылаться только на переменную a
на предмет сбора мусора, если поток, содержащий a
, все еще жив?
например, существует следующий класс с переменной ThreadLocal:
public class Test {
private static final ThreadLocal a = ...; // references object b
}
Этот класс ссылается на некоторый объект, и этот объект не имеет других ссылок на него. Затем во время контекста undeploy приложение classloader становится объектом сбора мусора, но поток из пула потоков, поэтому он не умирает. Будет ли объект b
подвергаться сбору мусора?