Si vous voulez rouler le vôtre :
private static final int MAX_WORKERS = n;
private List<Worker> workers = new ArrayList<Worker>(MAX_WORKERS);
private boolean roomLeft() {
synchronized (workers) {
return (workers.size() < MAX_WORKERS);
}
}
private void addWorker() {
synchronized (workers) {
workers.add(new Worker(this));
}
}
public void removeWorker(Worker worker) {
synchronized (workers) {
workers.remove(worker);
}
}
public Example() {
while (true) {
if (roomLeft()) {
addWorker();
}
}
}
Où Worker est votre classe qui étend Thread. Chaque travailleur appelle la méthode removeWorker de cette classe, en se passant lui-même en paramètre, lorsqu'il a terminé son travail.
Cela dit, le cadre de l'Executor semble bien meilleur.
Edit : Quelqu'un peut expliquer pourquoi c'est si mauvais, au lieu de simplement le downmodder ?