私はシステム上のユーザ専用のスレッドを持っていますが、それらを個別に停止したいのですが、スレッドのIDを作成時にuserdataとともに保存し、割り込み?または私は何とか私のユーザーオブジェクトにスレッドを追加してちょうどmyuser.mythread.interrupt();
のように呼び出すことができますか?オブジェクトへのスレッドIDの定義と割り込み
現在、私はそれらをすべて停止し、必要なスレッドなしで再起動できます。 しかし、それは時間のかかる作業であり、ユーザーが待たなければならない遅れを引き起こします。
アップデート、これは答えでしょうか?
if(delete==true) {
if (Thread.currentThread().getId() == deleteId) {
Thread.currentThread().interrupt();
delete=false;
}
}
更新
I)は、(myuser.mythread.interruptを使用する方法を見つけることができました。 または並べ替えの...
私は、ユーザークラスにサブクラスとしてスレッドを追加し、起動して中断し、ユーザのクラスにメソッドを作成し、今私は
online.get(1).hellos();
online.get(1).hellosStop();
でスレッドを開始し、停止することができます参照を作成して、ユーザーオブジェクト以外のものを追跡する必要はありません。スレッドが離れている場合になりますように、あなただけの、おそらくWeakReference
で、Thread
の参照を格納することができます(私はこのようにそれを行うことができ、参照としてIDを使用して受け入れ答えについて、)
更新
public class MyRunnable implements Runnable {
private boolean runThread = true;
@Override
public void run() {
try {
while (runThread) {
if(delete==true) {
if (Thread.currentThread().getId() == deleteId) {
Thread.currentThread().interrupt();
delete=false;
}
}
Thread.sleep(5);
}
}
catch (InterruptedException e) {
// Interrupted, no need to check flag, just exit
return;
}
}
}
スレッドのメインループを含む 'while(!Thread.interupted()&& isActive)'(isActiveは外側から切り替えられる 'AtomicBoolean'です)を持っています。しかし、多分OPはスレッドのRunnableの内容を変更することはできません。 –
私は真または偽にスレッドを破棄するか、または割り込みキャッチを引き起こすように設定し、そのキャッチ私は再び割り込みを実行するブール値のvarを持っています。これは機能していますが、すべてのスレッドを制御します。スレッドを制御するために変数インジケータを「プログラムで」追加する方法はありますか? 'boolean run_ + thread1 = true;'のように? (run_ + getPassedData){' –
スレッドにフィールドを追加するだけです。スレッドを作成するときは、そのコンストラクタがそのコンストラクタでAtomicBooleanを受け入れるようにしてください。このブール値を変更して、スレッドに停止を通知することができます。 – john16384