4

3 つの別々のスレッドで 3 つのメソッドを呼び出し、後でそれらを強制終了する必要があるアプリケーションがあります。Javadoc によると、私はそのスレッドstop()に気付き、destroy()廃止されました。スレッドを次々と開始し、同様に次々と殺すようなものです。非推奨のメソッドを使用できないため、スレッドを強制終了する特定の方法はありますか

どんな助けでも大歓迎です。再度、感謝します

4

3 に答える 3

3

スレッドを強制終了しません。Thread.interrupt()を呼び出してから、interruptedステータスに反応するかInterruptedException 、中断されているスレッド内で反応します。または、volatileフラグを使用します。背景と詳細については、公式ドキュメントを参照してください。

さらに良いことに、コメントで提案されているように、生のスレッドの代わりにスレッドプール/エグゼキューターを使用してください。

于 2012-04-18T11:08:19.050 に答える
0

どこでも毎回機能する方法で不正なスレッドを終了することは、ほとんど不可能です。

実行中のスレッドのソースコードを制御できる場合は、必要なときにスレッドを停止できるメソッドを追加する必要があります。基本的に、このメソッドはブール変数を変更し、スレッドはその値を定期的にチェックして、続行できるかどうかを確認します。

public class MyTask implements Runnable {
    // Set this to true when thread must stop.
    private boolean mStopRequested = false;
    public void run() {
        while (mStopRequested == false) {
            // ...
        }
    }
}

そのような方法を提供していないサードパーティのライブラリを呼び出すと、運が悪くなり、醜い応急修理に頼らざるを得なくなります。ライブラリによってアクセスされたファイルを削除して、長時間実行されているサードパーティのライブラリ呼び出しを強制終了する必要がありました(FileNotFoundExceptionをスローして終了しました)。そしてそれはUnixシステムでのみ機能しました。

あなたのマイレージは異なります。

于 2012-04-18T11:07:26.583 に答える
0

レシーバーが実行を終了して終了するか、指定されたタイムアウトが期限切れになるまで、join メソッドを使用します。

thread1.join(1);
thread2.join(2);
thread3.join(3);

例外を処理する必要があります。

于 2012-04-18T11:22:18.513 に答える