2010-11-16 5 views
3

J'utilise Java 6.Comment exécuter 10 threads à la fois à partir de 100 threads en Java?

Supposons que je crée 100 threads, chacun pour accomplir une tâche. Je veux exécuter 10 threads à la fois en continu. Cela signifie que si j'exécutais le thread 1-10, et que le thread 8 se termine, je veux pouvoir démarrer le thread 11 tout de suite, sans attendre que 1-10 se joigne à moi.

Comment est-ce que je peux faire ceci? Un moyen de contourner cela est probablement d'utiliser la méthode isAlive(), mais je me demandais si je pouvais le faire sans interroger.

Merci.

+0

http://javabeanz.wordpress.com/2010/02/19/threadpoolexecutor-basics/ – h3xStream

+0

Merci pour le lien. – Russell

Répondre

7

Pourquoi avez-vous besoin de le faire? Le meilleur moyen serait de créer un pool de 10 threads et de soumettre 100 tâches à l'intérieur de celui-ci. Cela aura exactement le même effet - 10 des 100 tâches sont exécutées simultanément.

ExecutorService pool = Executors.newFixedThreadPool(10); 

for (int i = 0; i < 100; i++) 
    pool.submit(...); 
+0

Bien! ThreadPool était ce que je cherchais. Merci beaucoup. – Russell

+0

@cdhowie, Merci pour la clarification. J'ai mal lu la question. –

1

Utilisez un ExecutorService threadpool avec 10 thread pour soumettre des tâches à. Tous les travaux que vous aurez terminés se termineront sur q File d'attente, à partir de laquelle les 10 threads exécuteront vos 1000 tâches.

0

Lorsque vous dites "à la fois" en parlant de simultanéité, vous confondez. Si vous utilisez un ExecuterService avec une taille de pool de threads de 10, 10 threads sur 100 seront activés pour l'exécution. Mais rappelez-vous que si vous n'avez qu'un processeur et qu'un de vos threads a une priorité plus élevée, tous les autres threads peuvent rester en attente. Ma suggestion est de régler votre nombre de threads en fonction du nombre de CPU disponible.