У меня есть программа, которая создает 10 потоков, и каждый поток имеет бесконечно бегущий цикл. Мне нужна помощь для эффективного использования крюка выключения, который может эффективно остановить все потоки. Поскольку я хочу сделать изящное закрытие, каждый поток должен закончить, как только он обнаружит, что флаг остановки повернут в ИСТИНА.Изящно выключение программы с несколькими потоками, имеющими бесконечный цикл while
public class SampleGSH implements Runnable{
private static boolean stop = false;
public static void main(String[] args) {
for(int i = 0; i < 10;i++) {
Thread t = new Thread(new SampleGSH(), "name"+i);
t.start();
}
}
@Override
public void run() {
Runtime.getRuntime().addShutdownHook(new Thread("shutdown thread") {
public void run()
{
System.out.println("*******");
synchronized (this)
{
System.out.println("Turning switch off");
stop = true;
}
}
});
synchronized (this) {
while(!stop)
{
//Some logic which should not be killed abruptly once it starts running, a graceful shut down will not allow this code to start
}
}
}
}
Любая помощь будет по достоинству оценена.
Или просто используйте методы thread.interrupt() и thread.isInterrupted() вместо этого, как предлагает @Gray. –