Я читал о InterruptedException, и сразу стало ясно, что не существует решения «серебряной пули» для правильной обработки во всех случаях.
То, что я еще не видел, это некоторый пример кода, демонстрирующий, чтоможет пойти не так, если исключение обработано неправильно.Конечно, я понимаю, что некоторые эффекты (такие как истощение потока, которое я считаю одним из них) трудно продемонстрировать.Я хочу ограничиться демонстрацией правильного использования Thread.sleep()
.
Как бы вы разработали несколько реалистичный пример программы для этого?
Вот мои идеи на данный момент:
Создайте простое приложение с графическим интерфейсом, чтобы продемонстрировать снижение скорости отклика. Там будет поток пользовательского интерфейса и простой пул потоков для выполнения некоторой задачи блокировки.Менеджер пула потоков проверяет прерванное состояние запущенных потоков, чтобы управлять ими.При проглатывании InterruptedException
s в пуле заканчиваются потоки, поэтому приложение становится менее отзывчивым.
Это может помочь указать на различные стратегии обработки для спящего в управляемом потоке по сравнению с неуправляемым.
Имеют несколько потоков, которые создают мусор и спят. Было бы два типа потоков: те, которые восстанавливают прерванное состояние при прерывании, и те, которые нет (проглотить исключение).Затем демонстрация будет состоять в том, чтобы запустить приложение в JVM с небольшим объемом памяти, и (мы надеемся) показать, что проглатывание исключения каким-то образом блокирует сборку мусора или увеличивает его издержки (из-за большого интервала между вызовами).*
Имеют ли эти идеи смысл?Любые другие (возможно, более простые) идеи?