Hello,

Sur conseil d'un autre topic, j'ai fait un Timeout comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public class Timeout {
    private Timeout() {}  
    private static final ScheduledExecutorService TIMER = Executors.newSingleThreadScheduledExecutor(); 
    public static void timeout(final Future<String> source, long delay, TimeUnit unit) {  
        Runnable cancel = new Runnable() {  
            public void run() {  
                source.cancel(true); 
            }  
        }; 
        TIMER.schedule(cancel, delay, unit); 
    }
}
Pour gérer les timeout sur un pool de threads. Cela fonctionne bien tant que le pool n'est pas plein, par exemple comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
        Executor executor = Executors.newFixedThreadPool(2);
        CompletionService<String> completionService =
            new ExecutorCompletionService<String>( executor );
 
        Future<String> resultTemp = null;
        for(int i=0;i<2;i++){
            resultTemp = completionService.submit( new Th1(text+i) );
            Timeout.timeout(resultTemp, 3000L, TimeUnit.MILLISECONDS);
        }
 
        ...
Mais, si, par exemple je remplace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Executor executor = Executors.newFixedThreadPool(2);
Par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Executor executor = Executors.newFixedThreadPool(1);
Le problème est que le timeout part du moment ou le thread est mis en queue et non du moment ou il est lancé... Ainsi, si le premier prends pas mal de temps, le timeout du premier est déjà terminé avant même qu'il n'ait commancé!!

Comment je peux résoudre cela?

Merci d'avance.

A+