Скажем, у меня есть классJava Многопоточность: изменение переменной из нескольких потоков
public class OuterClass
{
public static WorkerClass worker;
}
В потоке 1
Следующая команда выполняется
Outerclass.worker.doLongRunningOperation();
в то время как doLongRunningOperation
выполняется в потоке 2
Outerclass.worker = new WokerClass();
Что произойдет с doLongRunningOperation
в потоке 1?
Будет worker
объекта ссылается нитью 1 сборщик мусора, только после того, как doLongRunningOperation
завершена или она может быть внезапно прекращена в мусор собирать worker
объект.
Edit:
Я не думаю, что это должно быть GC'ed, так как он больше не ссылается. Но что будет с doLongRunningOperation
? будет ли оно прекращено внезапно?
Можете ли вы прояснить, что вы думаете, что произойдет и почему? Каковы некоторые причины, по которым это должно быть GC'ed, и каковы некоторые причины этого не следует? –
@SotiriosDelimanolis Я уточнил это в редакции. – q126y
Вы упомянули _ после того, как 'doLongRunningOperation' завершен, поэтому я смущен вашим новым вопросом, будет ли он внезапно прекращен? _ Посмотрите на концепцию корней GC. –