これを解決するには、スレッドを使用する必要があります。スレッドはマルチタスクのようなものです。
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);
そして ati = 5
がThread.stop()
呼び出されます。あなたのプログラムは、すべてが正しいと思っているのに、実際にはそうではありません!
スレッドを強制終了するには、 に設定run
しfalse
ます。run
はboolean
、2 番目の例で示したものです。もう 1 つのオプションは、Thread
(インライン オーバーライド メソッドだけでなく) のサブクラスを作成し、メソッドhalt()
( stop
is final ) を作成することです。falsehalt()
に設定されます。グローバルのままです。run
run
boolean
その例を次に示します。
public class MyThread extends Thread {
public boolean run = true;
public void run(){
run = true;
while(run)
doStuff();
}
public void halt(){
run = false;
}
}
2 つのスレッドが同じオブジェクトを一度に変更しないように注意する必要があります。オブジェクトを乱数ジェネレーターに変えるようなものです:/
スレッドの力を手に入れたあなたは、悪のためではなく善のために賢く使ってください! 進んでスレッドセーフになりましょう。