Quatre voies communes pour créer un pool de threads

Chaque fois que vous démarrez un nouveau thread devrait créer un gaspillage de ressources, il y a trop de threads lorsque le temps causera une panne du serveur, tous doivent gérer le fil de pool de threads, voici plusieurs façons de créer un point commun:

Tout d'abord, créez une taille de pool de threads est pas fixe

Ceci est un pool de threads ayant une fonction tampon, le système crée un thread au besoin. Le fil est tamponne à la piscine de fil, si la taille du pool de threads dépasse le fil des tâches de traitement nécessaire, le fil de pool de threads récupérera lorsque la tâche augmente, peut augmenter le fil de pool de threads pour gérer la tâche, le fil de la piscine de fil ne sera pas limite de taille, la taille du pool de threads dépend du système d'exploitation.

public class CacheThreadPoolTest {

    public static void main(String[] args) {
        ExecutorService es = Executors.newCachedThreadPool();
         for (int i = 0; i <10 ; i++) {
             CacheThreadPoolTest.Threadchi threadchi = new CacheThreadPoolTest.Threadchi();
            es.execute(threadchi);
        }
         es.shutdown();
    }

    private static class Threadchi implements  Runnable{
        @Override
        public void run() {
            for (int i = 0; i <10 ; i++) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

En second lieu, créer un nombre fixe de threads dans le pool de threads

A créé un réutilisable, il y a un nombre fixe de pool de threads. Chaque fois que vous soumettez une tâche de soumettre un fil, le fil sait atteindre la taille du pool de fil ne va pas créer un nouveau fil, la taille du pool de fil atteint le maximum après l'écurie et ne change pas, et si un site est abandonné, il va créer une nouvelle fil.

/**
 * @author zhengzheng
 */
public class FixedThreadPoolTest {

    public static void main(String[] args) {
        ExecutorService es = Executors.newFixedThreadPool(3);
        for (int i = 0; i <10 ; i++) {
            es.execute(()->{
                for (int j = 0; j <2 ; j++) {
                    System.out.println(Thread.currentThread().getName()+":"+j);
                }
            });
        }
        es.shutdown();
    }
}

Troisièmement, créer un pool de threads monothread

Seulement créer un fil de pool de threads, engager l'ordre, de suivre le numéro 1 est le même.

public class SingleThreadExecutorTest {


    public static void main(String[] args) {
        ExecutorService es = Executors.newSingleThreadExecutor();
        for (int i = 0; i <5 ; i++) {
            MyThread thread = new MyThread();
            es.execute(thread);
        }
        es.shutdown();
    }


    private static  class MyThread implements  Runnable{
        @Override
        public void run() {
            for (int i = 0; i <3 ; i++) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

Quatrièmement, créer un fil de minuterie

Créer une taille de pool de threads peut être réglé. Ce support de fil et des tâches périodiques régulières.

/**
 * @author zhengzheng046
 */
public class ScheduledThreadPoolTest {

    public static void main(String[] args) {
        MyThread task = new MyThread();
        ScheduledExecutorService es = Executors.newScheduledThreadPool(2);
        //参数1:目标对象   参数2:隔多长时间开始执行线程,    参数3:执行周期       参数4:时间单位
        es.scheduleAtFixedRate(task,2,4, TimeUnit.SECONDS);
        //注意.不能执行es.shutdown().否则线程池立即关闭
        //es.shutdown();
    }

    private static  class  MyThread implements  Runnable{
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"开始执行任务"+System.currentTimeMillis());
        }
    }
}

 

Publié 21 articles originaux · a gagné les éloges 4 · Vues 501

Je suppose que tu aimes

Origine blog.csdn.net/weixin_39617728/article/details/105038457
conseillé
Classement