2009-06-22 17 views
13

Qualcuno sa perché il membro join() del metodo di un java.lang.Thread è stato chiamato così? Il suo javadoc è:Perché il metodo java.lang.Thread.join() è stato chiamato così?

Attende che questo thread muoia.

Quando join viene chiamato su thread thread threading attende che l'altro muoia e continua l'esecuzione. Presumibilmente chiamare thread morirà pure, ma ancora non è chiaro il motivo per cui l'autore ha usato questo nome.

+0

Se pensi che il join non sia esattamente intuitivo, leggere i documenti MSDN tedeschi su System.Threading.Thread.Join(). È tradotto come "verknüpfen", che significa "link" piuttosto che "join". Bene, almeno i documenti dicono che aspetta che il thread finisca/finisca (piuttosto che morire);) – OregonGhost

+0

Bene, "verknüpfen" è "annodato". Quindi penso che stessero cercando di essere d'aiuto con la loro metafora del "filo". Enfasi su * provare *. – Zarkonnen

+0

Forse. Tuttavia, nei termini dello sviluppo del software, "verknüpfen" è sempre usato per "link" (come nei link ipertestuali o nei collegamenti della shell), quindi è una scelta piuttosto sbagliata. Ma ci sono molti di quelli nella traduzione tedesca di MSDN, anche se la maggior parte è abbastanza buona. A volte sembra proprio che i traduttori non conoscessero abbastanza la parte tecnica.Nelle versioni precedenti, "reference" è stato tradotto ciecamente come "Verweis", che è un riferimento in termini di programmazione, ma è stato tradotto anche in questo modo per documentazione di riferimento, dove non ha senso in tedesco ... Ma hanno risolto quello ;) – OregonGhost

risposta

16

È un nome comune nel threading: non è come se Java fosse il primo ad utilizzarlo. (Ad esempio, è quello che usa anche pthreads)

Immagino che tu possa immaginare come due persone che fanno una passeggiata - ti unisci all'altro e cammina con loro fino a quando non hai finito, prima di tornare a quello che eri facendo. Il ordinamento di analogia potrebbe essere stato il motivo originale, anche se sono d'accordo che non è esattamente intuitivo.

+1

+1 analogia molto bella – dfa

8

Si chiama così perché in pratica si sta affermando che il thread di esecuzione di chiamata sta per aspettare di unirsi allo stato di esecuzione dato. È anche chiamato join in posix e molti altri pacchetti di threading.

Dopo questa chiamata per partecipare restituisce (a meno che non è stato interrotto), i due thread di esecuzione sono fondamentalmente in esecuzione insieme da quel punto (con quel thread ottenendo il valore di ritorno del thread ora terminato).

+0

Direi meglio di "aspettare di unirsi allo stato di esecuzione dato" il thread chiamante "unisce i due thread insieme", in modo che ci sia logicamente solo un thread che fa qualcosa, invece dei due che erano indipendenti fino a quel momento. Tuttavia non sono soddisfatto al 100% di quell'espressione. – Adam

0

Poiché si sta aspettando un altro thread di esecuzione (ad esempio quello che si chiama join on) per unire (cioè morire) al thread corrente (cioè la chiamata).

Il thread chiamante non muore: attende semplicemente che l'altro thread lo faccia.

6

Questo deriva dalla modellazione software simultanea quando il flusso di controllo si divide in thread concomitanti. Successivamente, i due thread di esecuzione si uniranno di nuovo.

Anche waitToDie() era probabilmente un) troppo lungo eb) troppo morboso.

+0

Ah, ha più senso ora. 'wait()' potrebbe anche essere un'opzione però ... –

+0

Questa deve essere la vera motivazione dietro la nomenclatura –

0

Questa è una terminologia ampiamente utilizzata (anche al di fuori di Java). Prendo come una specie di Associare un Filo con un altro in qualche modo. Penso che Thread.Associate() avrebbe potuto essere un'opzione migliore, ma Join() non è male.

+0

Per me Thread.associate() implicherebbe qualche tipo di connessione tra i due thread oltre la chiamata, ma come entità separate. Penso che sia fuorviante in quanto il thread specificato non è più in esecuzione, ma piuttosto si combina in un singolo percorso di esecuzione definito dalla chiamata a join(). –

1

beh ... questo non è proprio corretto ma ho pensato ad una "sala d'attesa" (in realtà non è una coda con una certa programmazione come FIFO, HRRN o simili). quando un thread non può andare avanti e ha bisogno di aspettare su qualche altro thread per finirlo basta unire i ragazzi (ovvero i thread) nella sala d'attesa per attivarsi subito ...

Problemi correlati