私はJava /スレッドが初めてで、次のコードのようなものを継承しました。main() が 5 ~ 6 種類のスレッドのみを開始し、^C で終了するコマンド ライン プログラムです。すべてのスレッドを適切に閉じるためにシャットダウンフックを追加し、次のように調整したいと思います。
すべてのスレッドに Shutdown フックと stopThread() メソッドを追加しました (MyWorker クラスのものと同様)。
問題は、^CI を押しても、スレッドの run メソッドからの終了メッセージが表示されないことです。これはバックグラウンドで行われますか、それとも私の方法に何か問題がありますか? また、私が従うべきより良いパターンはありますか?
ありがとう
public class Main {
public static MyWorker worker1 = new MyWorker();
// .. various other threads here
public static void startThreads() {
worker1.start();
// .. start other threads
}
public static void stopThreads() {
worker1.stopThread();
// .. stop other threads
}
public static void main(String[] args)
throws Exception {
startThreads();
// TODO this needs more work (later)
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
stopThreads();
} catch (Exception exp) {
}
}
});
} }
public class MyWorker extends Thread {
private volatile boolean stop = false;
public void stopThread() {
stop = true;
}
public void run() {
while (!stop) {
// Do stuff here
}
// Print exit message with logger
}
}