1

私が試しているコード

public void killJob(String thread_id)throws RemoteException{   
Thread t1 = new Thread(a);   
    t1.suspend();   
}

IDに基づいてスレッドを一時停止/一時停止するにはどうすればよいですか? Thread.suspend は非推奨です。これを実現するには、代替手段が必要です。スレッドを中断して強制終了したいスレッド ID があります。

編集:これを使用しました。

AcQueryExecutor a=new AcQueryExecutor(thread_id_id);
Thread t1 = new Thread(a); 
t1.interrupt(); 
while (t1.isInterrupted()) { 
    try { 
       Thread.sleep(1000); 
    } catch (InterruptedException e) { 
       t1.interrupt(); 
       return; 
    } 
} 

しかし、私はこのスレッドを止めることができません。

4

2 に答える 2

8

IDに基づいてスレッドを一時停止/一時停止するにはどうすればよいですか?...スレッドIDを持っているので、スレッドを一時停止して強制終了します。

最近のスレッドを殺す正しい方法はinterrupt()それにあります。これにより、Thread.isInterrupted()がtrueに設定され、、、およびその他のいくつかのメソッドがスローされます。wait()sleep()InterruptedException

スレッドコード内で、次のようなことを実行して、中断されていないことを確認する必要があります。

 // run our thread while we have not been interrupted
 while (!Thread.currentThread().isInterrupted()) {
     // do your thread processing code ...
 }

スレッド内で中断された例外を処理する方法の例を次に示します。

 try {
     Thread.sleep(...);
 } catch (InterruptedException e) {
     // always good practice because throwing the exception clears the flag
     Thread.currentThread().interrupt();
     // most likely we should stop the thread if we are interrupted
     return;
 }

スレッドを一時停止する正しい方法は少し難しいです。volatile boolean suspendedスレッドに注意を払うようなフラグを設定することができます。object.wait()スレッドを一時停止してから、スレッドの実行を再開するために使用することもできますobject.notify()

于 2012-06-13T17:18:45.300 に答える
0

最近、内部で を使用するPauseableThread実装を投稿しましたReadWriteLock。これらのいずれかまたはバリアントを使用すると、スレッドを一時停止できるはずです。

IDでそれらを一時停止することに関しては、少しグーグルすると、すべてのスレッドを反復処理する方法が提案され、機能するはずです。しばらくの間、 getIdThreadメソッドを公開しました。

スレッドの強制終了は異なります。@Grayはそれをきちんとカバーしています。

于 2012-06-14T14:50:48.867 に答える