2010-09-20 3 views
1

Je reçois un nombre de tâches croissant (comme 1,2,3,4,5,6,7 ...) lorsque j'imprime s.getTaskCount(). Je ne comprends pas pourquoi.ScheduledThreadPoolExecutor avec une tâche planifiée (Runnable) conserve le compte rendu du travail en continu + 1 tout le temps

public class MyTask implements Runnable 
{ 
    public void run() 
    { 
     System.out.println("whatever...."); 
    } 
} 


ScheduledThreadPoolExecutor s = new ScheduledThreadPoolExecutor(3); 
s.scheduleAtFixedRate(new MyTask(), 0, 10, TimeUnit.SECONDS); 


while(1>0) 
{ 
    try 
    { 
     System.out.println("TASK COUNT: "+s.getTaskCount()); 
     Thread.sleep(60000); 
    } 
    catch(InterruptedException e) 
    { 
     System.out.println(e); 
    } 
} 

Répondre

3

ScheduledThreadPoolExecutor.getTaskCount() indique dans la documentation:

Renvoie le nombre total approximatif des tâches qui ont été programmées pour exécution. Parce que les états des tâches et les fils peuvent changer dynamiquement pendant le calcul, la valeur retournée est une approximation, mais qui ne diminue jamais dans appels successifs

Ainsi, les retours getTaskCount() le nombre total de tâches qui ont été exécutées par le pool.

Je ne suis pas sûr de votre objectif, mais si vous voulez connaître le nombre de tâches en cours d'exécution, essayez getActiveCount().

+0

Renvoie le nombre total approximatif de tâches programmées pour l'exécution. <- Est-ce que cela devrait retourner 1 ou peut-être 2 mais jamais 12 ou 25 si j'attends assez longtemps? – Krolique

+0

J'essaie d'obtenir un compte actif de toutes les tâches que j'ai planifiées pensait cet exécuteur ou plutôt de voir combien de tâches ce qui sont encore en cours d'exécution. – Krolique

+0

Non, il continuera à augmenter au fil du temps. C'est le nombre total de tâches qui sont entrées dans la file d'attente. getActiveCount() renverra le nombre en cours d'exécution. –

Questions connexes