2010-07-01 3 views

risposta

7

Direi che una buona pratica generale è "scegliere buoni nomi", questo vale per variabili, metodi, computer, forse anche bambini (basta chiedere a mio figlio Gerund Extravagaza Smith).

Quindi sì, scegliere nomi significativi per i thread, se possibile.

Supponiamo di aver richiesto una convenzione di denominazione per file o computer. Ti aspetteresti che ci sia una risposta generalmente applicabile? Penso che sia necessario generare una propria convenzione che abbia senso con il tipo di thread che crei.

vorrei seguire questi principi generali:

  • brevi, consente di evitare reallyLongNamesWithManyProbablyIrreleventClauses-Thread-01
  • significativo, ma accettare il fatto che si può avere un pool di thread di lavoro-01, job-02
  • parte più significativa primo

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

    tende ad ordinare male così preferire Listener-http-01

4

Lavoro su un sistema in cui sono in esecuzione diversi processi Java. Usando log4j, instrado tutto l'output in un singolo file di registro.

Per avere un'idea generale di dove proviene l'output di registrazione, utilizzo il flag di output del thread sorgente di log4java che stampa il nome del thread di origine prima del messaggio di debug.

Quindi per me è essenziale utilizzare nomi di thread validi.

4

Io lavoro principalmente su applicazioni java standalone e talvolta il dump del thread completo è tutto ciò che dobbiamo risolvere un problema. Anche i nomi dei thread sono vitali. Sono una di quelle cose a cui non pensi davvero fino a quando non ne hai bisogno, e tutti i tuoi thread sono chiamati "Thread-145", ecc.

Detto questo, non ho visto nessuna convenzione di denominazione particolare . Usa qualcosa che riconoscerai più tardi, dove non è probabile che riutilizzi i nomi. Potrebbe valere la pena di chiarire dal nome quanti thread si aspettano siano attivi nel sistema, in modo da poter dire se si hanno "perdite di thread" in seguito.

5

Sì, i thread di denominazione aiutano sicuramente a identificarli, ma con un avvertimento: assicurati di dare loro nomi univoci, perché puoi, se scegli di (o forse accidentalmente), usare lo stesso nome per più filettature.

class Thread: Ogni thread ha un nome per scopi di identificazione. Più di un thread potrebbe avere lo stesso nome.

Dare più thread con lo stesso nome può peggiorare le cose e causare confusione invece di aiutare il debug.

+4

Un modo semplice per ottenere nomi univoci per i thread è utilizzare ThreadFactoryBuilder di Guava. Puoi chiamare '.setNameFormat (" MyThread-% s ") e riempirà automaticamente interi in sequenza. http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/util/concurrent/ThreadFactoryBuilder.html#setNameFormat%28java.lang.String%29 –

+0

Oppure, se non si indossa Se vuoi importare un'intera libreria solo per creare un ThreadFactory, puoi semplicemente implementare un ThreadFactory. Sun's j.u.c.Executors $ DefaultThreadFactory offre una buona implementazione iniziale che è abbastanza semplice da modificare. –

1

Sì, la denominazione dei thread sarebbe una buona pratica.Se hai usato Eclipse Debug e se la tua applicazione java ha implementato i thread, puoi vedere chiaramente i thread in esecuzione in parallelo con alcuni nomi casuali, "Thread" seguito da una sequenza numerica. Se puoi dare un nome significativo (anche in questo caso potresti dover usare una sequenza, ma è completamente personalizzabile e dipende da te), sarebbe utile durante il tempo di Debug.