Здесь есть два понятия. Один из них - это сам поток, работающий в процессоре, имеющий стекную память. Другой - объект Thread
, который представляет собой панель управления для доступа к потоку.
В потоке есть память стека, которая отбрасывается, когда нить умирает (run()
завершается, или исключение бросается, в основном). Тем не менее, java-объект Thread
остается вокруг, пока на нем больше нет ссылки.
Итак, допустим, у вас это:
this.myThread = new Thread(){
public void run()
{
int[] takeUpSomeMemory = new int[10000];
while(ButtonDown){
UpdateValues();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
this.myThread.start();
Так у вас есть экземпляр переменной myThread
который содержит ссылку на Thread
вы создаете. Когда вызывается метод start
, вызывается ваш поток и выделяет довольно небольшую часть памяти для переменной takeUpSomeMemory
. После того, как метод run()
умирает, выполнив выполнение или выбросив исключение, память для takeUpSomeMemory
- это сборщик мусора. Память для this.myThread
сохраняется до тех пор, пока значение параметра instanceVariable не будет установлено равным nil или объект окружающего класса будет собран в мусор.
Он не вносит никаких изменений в пользовательский интерфейс, он изменяет значения некоторых координат, которые обрабатываются другим потоком, который заботится об обновлении экрана с помощью lockcanvas. Это хороший способ сделать это? – Araw
Уверен, но вам не нужно ничего делать, чтобы убить нить. –
Хорошо, спасибо за вашу помощь :) +1 – Araw