Строка # и файл обычно является всем, что необходимо найти преступником. Если Вы - тот, выдающий исключение, рассматриваете использование ArgumentNullException
, в подходящих случаях, или проверяющий на пустые указатели и бросающий NullReferenceException
с, которые имеют больше деталей о пустом поле.
Редактирование Ваше редактирование:)
AFAIK, необходимо было бы исследовать строку отслеживания стека для получения той строки # и файл. Ваш лучший выбор состоял бы в том, чтобы получить самое внутреннее исключение, и затем посмотреть на первую строку его отслеживания стека. Если Вы хотите быть в состоянии программно проанализировать ту информацию для обнаружения, какое поле вызвало пустой указатель, и сделайте что-то с названием того поля, я боюсь, что Вы будете неудачливыми.
Вт. Craig Trader
Положительная сторона. Для нулевого значения, которое передается в метод, ArgumentNullException
, должен быть брошен. Для членской переменной, которая еще не была инициализирована, что-то как InvalidStateException
, вероятно, будет хорошо для броска. К сожалению, я не могу найти никакое подобное исключение в MSDN. Самокрутка?
Для некоторой истории: исполнители были добавлены только как часть стандарта Java в Java 1.5. Так что в некотором смысле Executors можно рассматривать как новую лучшую абстракцию для работы с Runnable задачами.
Ожидается небольшое упрощение ... - Executors - это потоки, выполняемые правильно, поэтому используйте их в предпочтении.
Я использую Thread, когда мне нужна обработка сообщений на основе pull. Например, Queue - это take () - en в цикле в отдельном потоке. Например, вы оборачиваете очередь в дорогостоящий контекст - скажем, соединение JDBC, соединение JMS, файлы для обработки с одного диска и т. Д.
Прежде, чем меня проклянут, у вас есть какой-нибудь сценарий?
Изменить ]:
Как утверждали другие, интерфейс Executor
( ExecutorService
) имеет больший потенциал, поскольку вы можете использовать Executors
для выбора поведения: запланировано , с приоритетом, кэшированием и т. д. в Java 5+ или резервным портом juc для Java 1.4.
Среда исполнителя имеет защиту от сбоев исполняемых файлов и автоматически воссоздает рабочие потоки. Один недостаток на мой взгляд,
Если вы используете ограниченные очереди, вам необходимо указать RejectedExecutionHandler
, иначе новые исполняемые файлы будут выброшены.
Вы можете посмотреть Brian Goetz et al: Java Concurrency in Practice (2006)
Использование сырых потоков не дает никаких преимуществ. Вы всегда можете снабдить исполнителей фабрикой потоков, поэтому предусмотрена даже возможность создания настраиваемых потоков.
Вы не используете Thread, если вам не требуется более конкретное поведение, которого нет в самом Thread. Затем вы расширяете Thread и добавляете желаемое поведение.