Сбор мусора объектов, который содержит потоки или ExecutorServices

Если у меня есть класс Foo, экземпляр которого может создать поток, если я вызову метод doSomething(), и у меня есть список экземпляров Foo в моем основном потоке.

class Foo()
{
    private Thread t;

    public void doSomething()
    {
        t = new Thread(() ->  {
            while(!isInterrupted())
            {
                //do something
            }

        });
        t.start();
    }
}
  1. Если я правильно понимаю, если я удалю один из экземпляров Foo из своего списка, он не будет собирать мусор, если я ранее вызывал метод doSomething, а экземпляр создавал поток?

Как следствие, я должен добавить метод в Foo, например:

public void stop()
{
    if(t != null)
    {
        t.interrupt();
    }
}
  1. Если я вызову этот метод после удаления экземпляра из списка, экземпляр и поток (который больше не работает) станут доступными для GC?

Если у меня вместо потока ExecutorService в Foo, например:

scheduler = Executors.newSingleThreadScheduledExecutor();
sf = scheduler.scheduleAtFixedRate(() -> {/*do something*/}, 0, 1, TimeUnit.SECONDS);
  1. Это такое же поведение? Должен ли я также вызывать метод stop?

Метод stop в этом случае будет выглядеть примерно так:

public void stop()
{
    if(sf != null)
    {
        sf.cancel(true);
    }
}

person Semaphor    schedule 18.11.2015    source источник
comment
Поток поддерживает себя и любой объект, на который он строго ссылается.   -  person Peter Lawrey    schedule 18.11.2015
comment
Вместо отмены задачи я отключил бы службу-исполнитель на случай, если она когда-либо будет использоваться для чего-то другого в будущем.   -  person Peter Lawrey    schedule 18.11.2015
comment
Ваш первый комментарий на самом деле является ответом на мой вопрос, поэтому вы, возможно, поместите его в ответ. В моем случае, если я вызову stop(), экземпляр и задача больше не будут использоваться, поэтому я могу отменить ее.   -  person Semaphor    schedule 18.11.2015


Ответы (1)


Ответ во всех случаях да (см. комментарий Питера Лоури вне вопросов).

person Semaphor    schedule 23.11.2015