Je suis tombé sur un extrait de code en lisant la section ExecutorService
du livre Java 8 The complete reference
.Java ExecutorService - Création d'un nouveau thread sans le démarrer
L'extrait de code ci-dessous explique comment fonctionne ExecutorService
.
// A simple example that uses an Executor.
import java.util.concurrent.*;
class SimpExec {
public static void main(String args[]) {
CountDownLatch cdl = new CountDownLatch(5);
CountDownLatch cdl2 = new CountDownLatch(5);
CountDownLatch cdl3 = new CountDownLatch(5);
CountDownLatch cdl4 = new CountDownLatch(5);
ExecutorService es = Executors.newFixedThreadPool(2);
System.out.println("Starting");
// Start the threads.
es.execute(new MyThread(cdl, "A"));
es.execute(new MyThread(cdl2, "B"));
es.execute(new MyThread(cdl3, "C"));
es.execute(new MyThread(cdl4, "D"));
try {
cdl.await();
cdl2.await();
cdl3.await();
cdl4.await();
} catch (InterruptedException exc) {
System.out.println(exc);
}
es.shutdown();
System.out.println("Done");
}
}
class MyThread implements Runnable {
String name;
CountDownLatch latch;
MyThread(CountDownLatch c, String n) {
latch = c;
name = n;
new Thread(this);
}
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name + ": " + i);
latch.countDown();
}
}
}
Ce que je ne suis pas en mesure de comprendre est la dernière ligne dans le constructeur de la classe MyThread
.
Le constructeur de MyThread
crée un objet de Thread
en utilisant
nouvelle discussion (ce)
Cependant, ce fil est nouvellement créé n'a jamais commencé en appelant la méthode start()
. Aussi, selon ma compréhension ExecutorService
crée et gère ses propres threads pour exécuter notre tâche runnable
. Alors pourquoi cet objet Thread
est-il créé dans ce cas?
(a) la ligne que vous mentionnez est un no- op donc il suffit de l'enlever. (b) Pourquoi appelle-t-on une classe 'RunThread'' MyThread' et non, disons, 'MyRunnable'? – assylias
@assylias (a) Je suis confus alors pourquoi cette ligne fait-elle même partie du code d'exemple. (b) C'est un exemple de code du livre, pas mon code;) – Nullpointer
(a) Seul l'auteur sait (b) Je comprends - Je disais juste que cela me fait douter de la qualité du livre. Mais je n'ai pas lu ce livre donc je ne sais pas. – assylias