Sono nuovo in questa programmazione concorrente in java e ho elaborato i seguenti scenari in cui mi sto confondendo su quale utilizzare quando.
Scenario 1: Nel seguente codice che stava cercando di eseguire i thread chiamando .start() sulla classe GPSService che è un'implementazione Runnable.Quale è la differenza tra executeService e thread.run nell'esecuzione di thread contemporaneamente in Java?
int clientNumber = 0;
ServerSocket listener = new ServerSocket(port);
while (true) {
new GPSService(listener.accept(), clientNumber++, serverUrl).start();
}
Scenario 2: Nel seguente codice che stava cercando di eseguire i thread utilizzando classe ExecutorService come mostrato
int clientNumber = 0;
ServerSocket listener = new ServerSocket(port);
while(true) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new GPSService(listener.accept(), client++, serverUrl));
executor.shutdown();
while (!executor.awaitTermination(1, TimeUnit.SECONDS)) {
// Threads are still running
System.out.println("Thread is still running");
}
// All threads are completed
System.out.println("\nThread completed it's execution and terminated successfully\n");
}
Le mie domande sono
che è la pratica migliore per invocare un filo in programmazione concorrente?
Quale sarà il risultato (guai) Mi ritroverò quando uso il primo o il secondo?
Nota: Ho riscontrato un problema con il primo scenario in cui il programma viene sospeso dopo alcuni giorni. Quindi, il problema è relativo/atteso quando utilizzo il primo metodo?
Qualsiasi risposta valida/utile sarà apprezzata :) Grazie
possibile duplicato del [pool di thread vs Spawning thread] (http://stackoverflow.com/questions/2049948/thread-pool-vs-thread -spawning) –
@NarendraPathai Sono più specifico della mia domanda, se sì, come puoi contrassegnarlo come duplicato ??? –
@NarendraPathai Ho appena menzionato l'appeso solo per chiarire se FirstScenario ha la possibilità di causare tali problemi. Per tua comprensione, non ho chiesto la soluzione per quel problema sospensivo. E grazie per il vostro riferimento –