Когда мы должны использовать Поток Java по Исполнителю?

Строка # и файл обычно является всем, что необходимо найти преступником. Если Вы - тот, выдающий исключение, рассматриваете использование ArgumentNullException, в подходящих случаях, или проверяющий на пустые указатели и бросающий NullReferenceException с, которые имеют больше деталей о пустом поле.

Редактирование Ваше редактирование:)

AFAIK, необходимо было бы исследовать строку отслеживания стека для получения той строки # и файл. Ваш лучший выбор состоял бы в том, чтобы получить самое внутреннее исключение, и затем посмотреть на первую строку его отслеживания стека. Если Вы хотите быть в состоянии программно проанализировать ту информацию для обнаружения, какое поле вызвало пустой указатель, и сделайте что-то с названием того поля, я боюсь, что Вы будете неудачливыми.

Вт. Craig Trader

Положительная сторона. Для нулевого значения, которое передается в метод, ArgumentNullException, должен быть брошен. Для членской переменной, которая еще не была инициализирована, что-то как InvalidStateException, вероятно, будет хорошо для броска. К сожалению, я не могу найти никакое подобное исключение в MSDN. Самокрутка?

53
задан 2 revs 15 April 2010 в 18:57
поделиться

4 ответа

Для некоторой истории: исполнители были добавлены только как часть стандарта Java в Java 1.5. Так что в некотором смысле Executors можно рассматривать как новую лучшую абстракцию для работы с Runnable задачами.

Ожидается небольшое упрощение ... - Executors - это потоки, выполняемые правильно, поэтому используйте их в предпочтении.

30
ответ дан 7 November 2019 в 08:52
поделиться

Я использую 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)

7
ответ дан 7 November 2019 в 08:52
поделиться

Использование сырых потоков не дает никаких преимуществ. Вы всегда можете снабдить исполнителей фабрикой потоков, поэтому предусмотрена даже возможность создания настраиваемых потоков.

5
ответ дан 7 November 2019 в 08:52
поделиться

Вы не используете Thread, если вам не требуется более конкретное поведение, которого нет в самом Thread. Затем вы расширяете Thread и добавляете желаемое поведение.

3
ответ дан 7 November 2019 в 08:52
поделиться