我是 Java/线程的新手,我继承了类似以下代码的内容。这是一个命令行程序,main() 只启动 5-6 个不同类型的线程并以 ^C 退出。我想添加一个关闭挂钩以正确关闭所有线程并按以下方式对其进行调整。
我在所有线程中添加了一个 Shutdown 钩子和一个 stopThread() 方法(如 MyWorker 类中的那个)
问题是当我按下 ^CI 时,看不到来自 Thread 的 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
}
}