Non so quando dovrei usare Multithread nello sviluppo Java e la logica/ragione per usarlo. Come aiuta in diversi scenari?
È necessario modificare il programma per utilizzare i thread per un paio di motivi diversi.
Quando il programma funzionerebbe molto più velocemente e utilizzare meglio l'architettura CPU/core multiplo che si esegue su. Uso la parola "significativamente" perché spesso l'aggiunta di thread aggiunge molta complessità, quindi un miglioramento della velocità del 20% potrebbe non valerne la pena.
Può essere difficile, tuttavia, determinare se il programma utilizzerà correttamente più processori in modo che la rielaborazione del programma sia un buon investimento. Solo se c'è un sacco di elaborazione/calcolo coinvolti otterrai un aumento di velocità. Se, ad esempio, il tuo programma è in attesa di IO (lettura o scrittura su disco o rete), potresti passare molto tempo a suddividere un programma in più thread solo per non vedere miglioramenti della velocità.
Quando ci sono più parti del programma che dovrebbero essere in esecuzione contemporaneamente. Non è che non potrebbe essere eseguito in un thread, ma farlo sarebbe più complicato. Ad esempio, un server Web ha più thread di gestione delle richieste, perché è più facile che ogni thread gestisca una singola richiesta, anche se non si può caricare una tonnellata di carico attraverso il server, in modo che più thread lo rendano più veloce.
Inoltre: la stessa domanda per le cose di J2EE, quando dovrei usare multithread nei miei servlet? O non dovrei?
Penso che le stesse risposte sopra si applicano. In generale i servlet sono attività molto piccole che sono progettate per tornare rapidamente, quindi è relativamente insolito per loro forgiare i thread. Tuttavia, se vi è un'attività di lunga durata che deve essere avviata da un servlet ma si desidera che restituisca un tipo di risposta "Starting job", sarà necessario un thread.
È importante notare che al momento dell'esecuzione del servlet, il gestore upstream probabilmente sta già utilizzando un pool di thread in modo da non dover fare nulla.
Edit:
Scenario 1 - Sto facendo un gioco a scorrimento in 2D con nemici e un tutto che, pensare metal slug
non ho un buon rispondere per questo. Dipende dal fatto che ci sia un sacco di rendering in corso e dipende da quali toolkit stai usando.
Scenario 2 - Sto creando un daemon di database per controllare più contenuti del database.
È probabile che si stia eseguendo il binding di un database in modo che più thread non possano darti nulla. Quindi, di nuovo, se si hanno query a lunga esecuzione, si potrebbe ottenere un miglioramento se le query brevi potrebbero essere eseguite in parallelo su altri thread. Ciò dipende anche da come il tuo database gestisce più connessioni.
Scenario 3 - Sto creando un servlet per JSP, con alcune informazioni recuperate dal database.
Se la risposta deve attendere il recupero delle informazioni, non vi è alcun motivo per farlo in un altro thread. Tuttavia, come ho detto sopra, se il servlet sta provando a biforcarsi una sorta di transazione di database che viene eseguita in background, dovresti usare una discussione.
Ancora una volta, la maggior parte dei contenitori servlet è già in esecuzione in un pool di thread.
domanda troppo generica ... – Sebastian
@Sebastian Bene .... Ho cercato un po 'e ho trovato questo, ma non ero soddisfatto dalla risposta. Così ho chiesto di nuovo in un modo che volevo che fosse. Se questa è troppo ampia, la domanda è questa: http://stackoverflow.com/questions/7419619/ –
Credo che la domanda sia abbastanza specifica da poter essere rimossa dalla stasi. – supersam654