2013-07-16 13 views
20

Il mio tutor mi ha detto che il thread principale è il thread principale di ogni thread, ma non è in grado di spiegarne il motivo.Qual è la relazione tra il metodo main() e il thread principale in Java?

Quando scrivo un semplice programma:

Class A{} 

Poi al momento di esecuzione viene generata un'eccezione:

java.lang.NoSuchMethodError: main Exception in thread "main" 

C'è qualche relazione tra il metodo main() e il filo conduttore?

+3

Il tuo insegnante è sbagliato. Non esiste una relazione genitore-figlio tra i thread Java. – EJP

+0

ovviamente, thread main è l'inizio dell'applicazione, JVM crea un [thread (main)] (http://www.codeproject.com/Articles/616109/Java-Thread-Tutorial#maintr) e chiama il main static class by it –

+5

@EJP: "wrong" è duro. Mentre i thread non portano questa relazione, si può dire che tutti i thread utente sono generati (direttamente o indirettamente) dal thread principale. – Thilo

risposta

37

C'è qualche relazione tra il metodo main() e il thread principale?

Quando la JVM si avvia, crea un thread chiamato "principale". Il tuo programma verrà eseguito su questo thread, a meno che tu stesso non crei thread aggiuntivi.

La prima cosa che il thread "Main" fa è cercare il tuo metodo static void main(String[] argv) e invocarlo. Questo è il punto di partenza per il tuo programma.

Se vuoi che le cose accadano "allo stesso tempo", puoi creare più thread e dare a ciascuno qualcosa da eseguire. Continueranno quindi a fare queste cose contemporaneamente. La JVM crea anche alcuni thread interni per il lavoro in background come la garbage collection.

+2

Se la prima cosa che "_Main_" Thread fa è cercare 'static void main (String args [])' Allora come mai ** il blocco statico ** viene eseguito per primo. –

+9

Ecco come funziona il caricamento delle classi. Prova a invocare un metodo su una nuova classe, caricherà la classe e inizializzerà (compresi i blocchi di inizializzazione statici in esecuzione). Niente di speciale su "main" lì. – Thilo

+0

@java_begin - senza il metodo principale, non è possibile eseguire il programma, quindi nessuna esecuzione statica. –

9

In primo luogo Main Thread is a parent thread of every thread è ambiguo. A differenza di Process, nei thread Java non esiste alcun concetto di genitore e figlio. Si dispone di ThreadGroups per raggruppare Thread e quindi avere gruppi figlio, ma è diverso da Process nel senso che se il genitore muore, il figlio rimane ancora.

Il thread main è la discussione che avvia il programma o semplicemente che esegue il metodo public static void main(String... args).

Problemi correlati