Quali sono i vantaggi in termini di velocità di elaborazione effettiva (la verosimiglianza del codice viene messa da parte) e per quale caso ciascuno sarebbe consigliato, come un buon modello di progettazione? Mi piacerebbe sapere quanto sopra in generale, ma anche se aiuta nel contesto del seguente che può essere riscritto in tutti e 3 i modi
static void parallelTestsExecution(String name,Runnable ... runnables){
ArrayList<BaseTestThread> list = new ArrayList();
int counter =0; // use local variable counter to name threads accordingly
for(Runnable runnable : runnables){//runnable contains test logic
counter++;
BaseTestThread t = new BaseTestThread(runnable);
t.setName(name+" #"+counter);
list.add(t);
}
for(BaseTestThread thread : list ){//must first start all threads
thread.start();
}
for(BaseTestThread thread : list ){//start joins only after all have started
try {
thread.join();
} catch (InterruptedException ex) {
throw new RuntimeException("Interrupted - This should normally not happen.");
}
}
for(BaseTestThread thread : list ){
assertTrue("Thread: "+thread.getName() , thread.isSuccessfull());
}
}
vs
static void parallelTestsExecution(String name,Runnable ... runnables){
ArrayList<BaseTestThread> list = new ArrayList();
int counter =0; // use local variable counter to name threads accordingly
for(Runnable runnable : runnables){
counter++;
BaseTestThread t = new BaseTestThread(runnable);//BaseTestThread extends thread
t.setName(name+" #"+counter);
list.add(t);
}
list.forEach((thread) -> {
thread.start();
});
list.forEach((thread) -> {
try {
thread.join();
} catch (InterruptedException ex) {
throw new RuntimeException("Interrupted - This should normally not happen.");
}
});
list.forEach((thread) -> {
assertTrue("Thread: "+thread.getName() , thread.isSuccessfull());
});
}
vs Compilare l'elenco con i thread associati a un eseguibile e utilizzabile list.Stream () ... ecc (attualmente non abbastanza sicuro di questo per pubblicare qualcosa di più concreto)
Sono specificamente interessato ad apprendere come funzionano ciascuno di questi meccanismi diversi e quali sono i loro punti di forza / debolezza per applicare il mio giudizio migliore ogni volta che è necessario per decidere cosa usare come best practice. La questione non riguarda la micro-ottimizzazione in generale e l'importanza di essa.