Maison > Java > javaDidacticiel > le corps du texte

Comment utiliser le framework multithread Executor (avec exemples)

不言
Libérer: 2018-09-27 14:34:23
original
2497 Les gens l'ont consulté

Le contenu de cet article explique comment utiliser le framework multithread Executor (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Dans notre JDK1.5, JAVA a lancé un framework (Executor) encapsulé pour un développement plus pratique d'applications multithread. Par rapport à la classe Thread traditionnelle, Executor est plus pratique, offre de meilleures performances et est plus pratique. plus pratique. Facile à gérer et prend en charge les pools de threads. Généralement, lors du développement d'un robot, afin d'améliorer l'efficacité du robot, le multi-thread est nécessaire, et Executor est un très bon choix.

Interfaces communes :

1) Créer un pool de threads avec un nombre fixe de threads :

public static ExecutorService newFixedThreadPool(int nThreads)

2) Exécuter un thread

void java.util.concurrent.Executor.execute(Runnable command)

3) Afficher le nombre actuel de threads actifs

int java.util.concurrent .ThreadPoolExecutor.getActiveCount ()

4) Terminer tous les threads

void java.util.concrrent.ExecutorService.shutdonw()

L'exécuteur sera efficace lors de la gestion de la disposition de plusieurs threads . Traitement, par exemple, lorsqu'il y a 10 threads dans le pool de threads lors de sa création, l'ajout de plus de 10 exécuteurs pour implémenter les threads effectuera un blocage et une planification efficaces de la file d'attente. Pour nous, développeurs, c'est transparent et il n'y a pas besoin de se soucier de la façon dont cela fonctionne en interne.

Exemple de code :

package com.java.executor;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class ExecutorTest {
    private static Integer count = 1; //数量
    
    private static boolean flag = true;//是否执行
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(10);//在连接池中初始化10个线程
        while(flag){
            if(count<=100){
                executorService.execute(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("执行 : " + count++);
                    }
                });
            }else{
                //判断是否有活动线程
                if(((ThreadPoolExecutor)executorService).getActiveCount()==0){
                    executorService.shutdown();//结束所有线程
                    flag=false;
                    System.out.println("完成操作");
                }
            }
            try {
                Thread.sleep(100);//休息0.1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
Copier après la connexion

C'est une façon simple d'utiliser Executor, c'est pratique et rapide, et la difficulté d'apprentissage est low.Pourquoi devrions-nous le faire ici ?Repos pendant 0,1 seconde.Nous n'avons pas de verrou sur le code ci-dessus jusqu'à ce que le nombre soit supérieur à 100, le thread sera toujours actif et le thread ne le sera pas. être fermé. De plus, la vitesse d'exécution du thread dépassera nos besoins et il est facile de bloquer l'IP lorsque le robot explore le Web à une telle vitesse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal