2010-07-01 2 views

ответ

7

Я бы сказал, что общая рекомендация «выбирать хорошие имена» относится к переменным, методам, компьютерам, возможно, даже к детям (просто спросите моего сына Герунду Экстравагазу Смит).

Так что да, выберите возможные имена для ваших потоков, если это возможно.

Предположим, мы попросили соглашение об именах для файлов или компьютеров. Ожидаете ли вы, что там будет общеприемлемый ответ? Я думаю, что вам нужно создать собственное соглашение, которое имеет смысл с тем потоком, который вы создаете.

Я бы следующие общие принципы:

  • Короткие, позволяет избежать reallyLongNamesWithManyProbablyIrreleventClauses-Thread-01
  • Значимое, но признают, что вы можете иметь пул потоков работы-01, работа-02
  • Наиболее значительная часть первая

    01-http-Listener 
    01-rmi-Listener 
    02-http-Listener 
    

    имеет тенденцию сортировать плохо так предпочитают Слушатель HTTP-01

4

Я работаю над системой, в которой работает несколько процессов Java. Используя log4j, я направляю весь вывод в один файл журнала.

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

Для меня важно использовать хорошие имена нитей.

4

Я работаю в основном с автономными приложениями Java, а иногда и с полным дампом потока - это все, что нужно для отладки проблемы. Имена тем жизненно важны и там. Они - одна из тех вещей, о которых вы действительно не думаете, пока они вам не нужны, и все ваши потоки называются «Thread-145» и т. Д.

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

5

Да, наименования нитей, безусловно, помогают идентифицировать их, но с одним озором: обязательно укажите им уникальные имена, потому что вы можете, если вы решите (или, возможно, случайно), использовать одно и то же имя для нескольких потоки.

class Thread: Каждая нить имеет имя для идентификации. У более чем одного потока может быть одно и то же имя.

Предоставление нескольким темам одного и того же имени может ухудшить ситуацию и вызвать путаницу, а не помогать в отладке.

+4

Легкий способ получить уникальные имена для потоков - использовать ThreadFactoryBuilder от Guava. Вы можете вызвать '.setNameFormat (« MyThread-% s »), и он будет автоматически заполнять последовательные целые числа. http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat%28java.lang.String%29 –

+0

Или, если вы не " t хотите импортировать целую библиотеку только для создания ThreadFactory, вы можете просто реализовать ThreadFactory. Sun's j.u.c.Executors $ DefaultThreadFactory предлагает приятную стартовую реализацию, которую довольно просто изменить. –

1

Да, именование потоков было бы хорошей практикой.Если вы использовали Eclipse Debug, и если в вашем приложении java реализованы потоки, вы можете четко видеть потоки, работающие параллельно с некоторыми случайными именами, «Thread», за которыми следует некоторая последовательность чисел. Если вы можете дать значимое имя (опять-таки вам, возможно, придется использовать последовательность, но это полностью настраивается и зависит от вас), это было бы полезно во время отладки.

Смежные вопросы