Javaで割り込みメソッドを使用する必要がある実際のケースは何ですか?JAVAで割り込みメソッドを使用する必要がある実用的なケースは何ですか?
0
A
答えて
3
いくつかの例があります。ほとんどの場合、スレッドをシャットダウンする意図があります。 にスレッド(documentation of Thread#interrupt)を割り込ませたい場合に必要です。
一つの例は、例外は、定期的に実行から何らかの異常を発生することができました。あなたはすぐにスレッドを聞きたいとは、新しい状況を処理する。
スレッドをシャットダウンする場合。次に、割り込みを使用して、スレッドがシャットダウンコールに反応し、数秒間スリープ状態にならないようにすることができます。
または、約10分かかるプログラムをインストールするアプリケーションを想像してください。インストールプロセスを中止するキャンセルボタンが必要な場合があります。そのボタンに割り当てられたメソッドは、フードの下でinterrupt
を使用して、プロセスが時間内に確実にキャンセルされるようにすることができます。
我々はその後、ダウンそれを破る場合に設定して確認することができ、その普通のフラグ。 Thread#interrupt
で設定し、Thread#isInterrupted
で確認してください。
このフラグを既に使用しているJavaライブラリには、Thread#sleep
などの複数のメソッドがあり、スリープ中にフラグが設定されていた場合はInterruptedException
がスローされます。
public class Waiter extends Thread {
private volatile boolean mShouldStop = false;
@Override
public void run() {
while (!this.mShouldStop) {
System.out.println("Still there!");
try {
// Sleep for 10 seconds
Thread.sleep(10_000);
} catch (final InterruptedException e) {
// Abort sleeping, got interrupted.
}
}
System.out.println("Shutting down!");
}
public void shutdown() {
this.mShouldStop = true;
}
}
と使用方法:終了後にシャットダウンコールのみに反応するスレッドを中断することなく
public class Demo {
public static void main(final String[] args) throws InterruptedException {
// Create and start the thread
final Waiter waiter = new Waiter();
System.out.println("Start");
waiter.start();
// Wait some seconds
Thread.sleep(25_000);
// Stop the thread, use interrupt to wake it up in case it slept
System.out.println("Kindly ask for shutdown");
waiter.shutdown();
System.out.println("Interrupt it");
waiter.interrupt();
}
}
ここ
は小さな一例として、ショーケースです寝るなので、さらに5秒必要です。
注:volatile
キーワードは、スレッドがオブジェクトを変更した後、すべてのスレッドが更新されたバリアントをフェッチし、古いキャッシュされたバリアントでは動作しないことを保証します。
もしあなたが質問したら - おそらく必要ありません –