Вы создаете Philosopher
экземпляров, но не добавляете их в list
, следовательно, список остается пустым, и ваш отключающий хук, кажется, не запускается, потому что он ничего не печатает на стандартный вывод.
РЕДАКТИРОВАТЬ
После вашего последнего комментария я бы предложил добавить запись в журнал, чтобы доказать, что все потоки заканчиваются.Например, вы можете присоединиться к каждому философскому потоку из основного потока, чтобы при завершении основного потока вы были уверены, что каждый философский поток ранее завершился.
// Start all philosopher threads
for (Philosopher phil : philosophers) {
phil.start();
}
for (Philosopher phil : philosophers) {
System.err.println("Joining with thread: " + phil.getName());
phil.join();
}
System.err.println("Main thread terminating.");
// Shut-down hook should now run.
}