Вам нужно использовать многопоточность, чтобы решить эту проблему.Потоки похожи на многозадачность.
Thread t = new Thread(){
public void run(){
//do job
}
}
t.start(); //starts the thread
Чтобы завершить поток, вам понадобится какое-то условие остановки
public boolean run = false;
Thread t = new Thread(){
public void run(){
while(run)
//do job
}
}
public void startThread(){
t.start(); //starts the thread
}
См. Также:
Thread.stop()
убьет поток, но это очень плохо.Например, предположим, что вы записываете в массив
for(int i = 0; i < myAr.length; i++)
myAr[i] = getStuff(i);
И в i = 5
вызывается Thread.stop()
.Теперь ваша программа думает, что все хорошо, хотя на самом деле это не так!
Чтобы убить поток, установите run
на false
.run
- это boolean
, который я показал во втором примере.Другой вариант - создать подкласс Thread
(не только в методах переопределения строк) и создать метод halt()
(stop
является окончательным).halt()
установит для run
значение false.run
все еще будет глобальным boolean
.
Вот пример этого.
public class MyThread extends Thread {
public boolean run = true;
public void run(){
run = true;
while(run)
doStuff();
}
public void halt(){
run = false;
}
}
Вы должны быть осторожны, чтобы два потока не модифицировали один и тот же объект одновременноэто было бы похоже на превращение объекта в генератор случайных чисел: /
Теперь, когда вы получили силу потоков, используйте ее с умом, во благо, а не во зло!Иди вперед и будь осторожен.