À quoi sert un pool de threads en Java?

à quoi sert un pool de fils? Est-il un bon exemple dans la réalité?

31
demandé sur Jonas 2010-07-20 06:45:10

6 réponses

Un pool de threads est un groupe de threads initialement créé qui attend les tâches et les exécute. L'idée est d'avoir les fils toujours existante, de sorte que nous n'aurons pas à payer les frais généraux de temps pour les créer à chaque fois. Ils sont appropriés lorsque nous savons qu'il y a un flux d'emplois à traiter, même s'il peut y avoir un certain temps où il n'y a pas d'emplois.

voici un joli diagramme de Wikipedia : alt text

39
répondu Amir Rachum 2017-02-08 14:28:53

Pools de Threads de la Java des Tutoriels a une bonne vue d'ensemble:

en utilisant des fils d'ouvrier minimise les frais généraux dus à la création de fil. Les objets Thread utilisent une quantité significative de mémoire, et dans une application à grande échelle, allouer et désallouer de nombreux objets thread crée une gestion de mémoire importante.

6
répondu Justin Ethier 2013-05-20 15:34:07
Les Pools de threads

ne sont utiles que dans une situation de type Serveur-client où le nombre/l'occurrence de requêtes client ne peut pas être déterminé/prédit.

dans ce scénario, créer un nouveau Thread chaque fois qu'une demande du client est faite présente deux inconvénients:

1) Temps de latence D'exécution pour la création de thread: Création d'un thread qui demande du temps, donc de l'emploi ne démarre pas dès que la demande vient. Le client peut remarquer un léger retard.

ce critère est crucial dans les systèmes interactifs, où le client attend une action immédiate.

2) utilisation non contrôlée des ressources du système: Les Threads consomment les ressources du système (mémoire, etc.), le système risque donc de manquer de ressources en cas de flux sans précédent de demandes de la part des clients.

pools de Threads répondre à ces préoccupations par:

1) Création du nombre spécifié de threads sur le serveur start-up au lieu de les créer pendant la course à pied.

2) limiter le nombre de threads qui tournent à tout moment.

Note: les dispositions ci-dessus s'appliquent aux Pools de fils de dimensions fixes.

5
répondu Avinash Ganta 2015-01-15 11:25:29

vous pouvez supposer que les Threads sont de véritables ouvriers et les pools de threads sont un groupe d'ouvriers. Vous pouvez créer plusieurs groupes pour différentes raisons comme la priorité,le but, etc. Ainsi, alors qu'un pool peut être pour des tâches à usage général comme les programmes d'arrière-plan, la diffusion de courrier électronique, etc. il pourrait y avoir un groupe de traitement des transactions pour traiter simultanément plusieurs transactions. Dans le cas d'un service D'exécuteur testamentaire, je suis sûr que vous ne voudriez pas retarder les travaux transactionnels à effectuer après d'autres les activités non critiques comme les courriels de confirmation de radiodiffusion ou les activités de maintenance de la base de données ne sont pas terminées. Vous pouvez les séparer en bassins et les entretenir de façon indépendante. C'est une réponse très simpliste sans entrer dans le jargon technique. Égard, KT

4
répondu Kapil 2010-07-20 05:52:26

a simple Google la recherche aboutira à une mine d'informations concernant les répertoires de threads Java et les répertoires de threads en général.

Voici quelques liens utiles:

4
répondu S73417H 2013-05-20 15:52:49

Thread pool est un pool de thread ouvrier déjà créé prêt à faire le travail. Il crée Thread et les gère. Au lieu de créer du fil et de les jeter une fois la tâche terminée, thread-pool réutilise les fils en forme de fil ouvrier.

pourquoi?

parce que la création de Thread est un processus qui prend du temps et qui retarde le traitement des requêtes. Il limite aussi le nombre de clients basé sur quoi beaucoup de thread par JVM est autorisé, ce qui est évidemment un nombre limité.


créer un pool de threads de taille fixe en utilisant Executor framework -

Java 5 a présenté une fonctionnalité intégrée complète du cadre de Pool de threads communément appelé Executor framework .

création de taille fixe thread pool en utilisant Java 5 Executor framework est assez facile en raison de la statique méthodes d'usine prévues par la classe Executors . Tout ce que vous devez faire est de définir votre tâche que vous voulez exécuter simultanément et de soumettre cette tâche à ExecutorService .

de là, Thread pool s'occupera de la façon d'exécuter cette tâche; elle peut être exécutée par n'importe quel thread d'ouvrier libre.

public class ThreadPoolExample {
    public static void main(String args[]) {
       ExecutorService service = Executors.newFixedThreadPool(10); //create 10 worker threads in Thread Pool
       for (int i =0; i<100; i++){
           service.submit(new Task(i)); //submit that to be done 
       }
    }  
}

final class Task implements Runnable {
    private int taskId;  
    public Task(int id){
        this.taskId = id;
    }

    @Override
    public void run() {
        System.out.println("Task ID : " + this.taskId +" performed by " 
                           + Thread.currentThread().getName());
    }  
}

Output:
Task ID : 0 performed by pool-1-thread-1
Task ID : 3 performed by pool-1-thread-4
Task ID : 2 performed by pool-1-thread-3
Task ID : 1 performed by pool-1-thread-2
Task ID : 5 performed by pool-1-thread-6
Task ID : 4 performed by pool-1-thread-5

*Output may vary from system to system
1
répondu roottraveller 2017-07-11 09:42:18