Что такое хороший пример программы для демонстрации неправильной обработки InterruptedException, брошенного потоком.спать ()?
Я читал о InterruptedException, и сразу видно, что нет никакого решения серебряной пули, чтобы справиться с ним должным образом во всех случаях.
Чего я еще не видел, так это некоторого примера кода, демонстрирующего, что может пойти не так, если исключение обрабатывается неправильно. Конечно, я понимаю, что некоторые эффекты (например, голодание нитей, которое я считаю одним из них) трудно продемонстрировать. Я хочу ограничить его демонстрацией правильного использования Thread.sleep()
.
Как бы вы подошли к разработке несколько реалистичного образца программы для этого?
Вот мои идеи до сих пор:
-
Сделайте простое приложение с графическим интерфейсом, чтобы продемонстрировать пониженную отзывчивость. там будет поток пользовательского интерфейса и простой пул потоков для выполнения некоторой задачи блокировки. Диспетчер пула потоков проверяет состояние прерванных запущенных потоков, чтобы управлять ими. Проглоченные
InterruptedException
s приводят к тому, что в пуле заканчиваются потоки, поэтому приложение становится менее отзывчивая.Это может помочь указать на различные стратегии обработки при спящем режиме в управляемом потоке и неуправляемом потоке.
-
Есть куча нитей, которые создают мусор и спят.Существует два типа потоков: те, которые восстанавливают прерванное состояние при прерывании, и те, которые этого не делают (проглатывают исключение). Тогда демонстрация состояла бы в том, чтобы запустить приложение в JVM с небольшим объемом памяти и (надеюсь) показать, что проглатывание исключение каким-то образом тормозит сборку мусора или увеличивает ее накладные расходы (из-за большого интервала между вызовами).
1 ответ:
Предположим, у вас есть поток, который вы хотите отключить, прервав его.
public void run() { while(!Thread.currentThread().interrupted()) { doWork(); callMethodWhichIgnoresInterrupted(); } }
Отбрасывая прерывание, вы можете получить поток, который иногда не может умереть, вызывая утечку ресурсов, которую вы не можете исправить без перезапуска приложения.
Игнорировать любое исключение-очень плохая идея в 95% случаев. Вот почему они являются проверяемыми исключениями в Java. Эти проблемы не ограничиваются прерываниями.