Сборка мусора Java для потоков - PullRequest
0 голосов
/ 30 июня 2018

Как именно сборка мусора в Java обрабатывает потоки?

Чтобы уточнить, у меня есть одноранговая сеть, которую я пишу на Java, и, если определено, что одноранговый узел действует злонамеренно или отклонен из таблиц маршрутизации, я удаляю все ссылки на объект Peer, который расширяет нить.

Правильно ли я предположил бы, что даже если я удалил все ссылки на экземпляр, поток для этого экземпляра и, следовательно, экземпляр не будет удален сборщиком мусора?

1 Ответ

0 голосов
/ 30 июня 2018

Нет. Он не будет собран или остановлен во время работы.

Вы должны остановить свой поток из потока, например, с помощью команды return;.

Вот эксперимент:

public class Main {
public static void main(String[] args) {

    Runnable r = new Runnable(){
        public void run() {
            for (int i=0; i < 10; i++) {
                System.out.println("Thread is running");
            }
            return;
        }
    };

    Thread t=new Thread(r);
    t.start();
    t=null;

    System.out.println("App finished");

}
}

Вот результат:

App finished
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running

Таким образом, поток не был остановлен или собран даже после того, как основной поток установил ссылку на ноль и перестал работать.

...