Должны ли потоки в Java называться для облегчения отладки?

Каковы наилучшие методы именования потоков в Java? Существуют ли какие-либо соглашения об именах, которым нужно следовать?


person parkr    schedule 01.07.2010    source источник


Ответы (5)


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

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

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

Я бы следовал этим общим принципам:

  • Коротко, давайте избегать действительно длинных именWithManyProbablyIrreleventClauses-Thread-01
  • Значимо, но примите, что у вас может быть пул потоков job-01, job-02
  • Самая важная часть первая

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

    имеет тенденцию плохо сортироваться, поэтому предпочитайте Listener-http-01

person djna    schedule 01.07.2010

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

class Thread: у каждого потока есть имя для целей идентификации. Несколько потоков могут иметь одно и то же имя.

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

person polygenelubricants    schedule 01.07.2010
comment
Простой способ получить уникальные имена для потоков — использовать ThreadFactoryBuilder из Guava. Вы можете вызвать `.setNameFormat(MyThread-%s) и он автоматически заполнит последовательные целые числа. guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/ - person Kevin Bourrillion; 01.07.2010
comment
Или, если вы не хотите импортировать всю библиотеку только для создания ThreadFactory, вы можете просто реализовать ThreadFactory. J.u.c.Executors$DefaultThreadFactory от Sun предлагает хорошую стартовую реализацию, которую довольно просто модифицировать. - person Tim Bender; 02.07.2010

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

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

Поэтому для меня очень важно использовать хорошие названия потоков.

person Jonathon Faust    schedule 01.07.2010

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

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

person Curtis    schedule 01.07.2010

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

person bragboy    schedule 01.07.2010