Nie uruchomiono haka Java Shutdown
Jestem nowy w Javie / wątkach i odziedziczyłem coś takiego jak poniższy kod. Jest to program wiersza poleceń, który main () uruchamia tylko 5-6 różnych rodzajów wątków i kończy działanie za pomocą ^ C. Chcę dodać hak zamykający, aby poprawnie zamknąć wszystkie wątki i dostosować go w następujący sposób.
Dodałem hak Shutdown i metodę stopThread () we wszystkich wątkach (takich jak ten w klasie MyWorker)
Problem polega na tym, że po naciśnięciu ^ C nie widzę komunikatu końcowego z metody uruchamiania wątku. Czy to się dzieje w tle, czy jest coś nie tak z moją metodą. Czy istnieje lepszy wzór, który powinienem podążać?
Dzięki
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
}
}