1 raisons d'introduire des pools de fil
Étant donné que le cycle de vie d'un fil comprend la création, prête, l'exécution, le blocage et la détruire des étapes, lorsque le nombre de tâches en attente est petit, nous pouvons créer plusieurs fils nous-mêmes pour gérer les tâches correspondantes, mais lorsqu'il y a un grand nombre des tâches, la création et la destruction des fils nécessite beaucoup de frais généraux, et l'utilisation de pools de fil atténuera considérablement ces problèmes.
2 Utilisation de la piscine de threads
Nous avons seulement besoin d'utiliser la méthode statique fournie par la classe des exécuteurs pour créer le pool de threads correspondant:
Exécution statique publique NewsingHetThereadExecutor () public static exécutorsevice newfixedThreadpool () public static exécutorsevice newcachedthre adpool ()
NewsingLeThreAdExecUtor renvoie un exécuteur contenant un seul thread.
NEWFIXEDTHREADPOOL Renvoie un pool de threads contenant un nombre spécifié de threads.
NewCachedThreadpool crée des threads correspondants en fonction du nombre de tâches de l'utilisateur.
Nous devons seulement mettre la tâche à exécuter dans la méthode d'exécution et remettre la classe d'implémentation de l'interface Runnable à la méthode EXECUTE du pool de threads en tant que paramètre, comme indiqué ci-dessous:
Executor Executor = exécutor.NewSingLetHreAdExecutor (); EMECTOR.Execute (new Runnable () {public void run () {// Tâches exécutées}}Si vous avez besoin de transmettre des paramètres à la tâche, vous pouvez le faire en créant une classe d'implémentation pour l'interface Runnable.
3. Exemple
(1): NewingtheThreadExecutor
Mythread.java
publicClassMyThread étend Thread {@Override publicVoid run () {System.out.println (thread.currentThread (). GetName () + "EXECUTION ...");}} Test SingleThreAdExECUTOR.JavapublicClasstest {// Créer un pool de threads qui peut réutiliser le nombre fixe de threads exécutorvice pool = exécuteurs. ; Pool.Execu Te (T2); Résultat de sortie
Pool-1-thread-1 s'exécute. . . Pool-1-thread-1 s'exécute. . . Pool-1-thread-1 s'exécute. . . Pool-1-thread-1 s'exécute. . . Pool-1-thread-1 s'exécute. . .
(2): newfixedThreadpool
TestFixEdThreadpool.java
publicClass TestFixEdThreadPool {publicStaticVoid Main (String [] args) {// Créer un pool de threads qui peut réutiliser le nombre fixe de threads ExecutorService pool = exécutor Runnable Interface Thread T1 = New Mythread (); Le pool exécute Pool.Exécute (T1); }} Résultat de sortie
Pool-1-thread-1 s'exécute. . . Pool-1-thread-2 s'exécute. . . Pool-1-thread-1 s'exécute. . . Pool-1-thread-2 s'exécute. . . Pool-1-thread-1 s'exécute. . .
(3): NewCachedThreadpool
TestCachedThreadpool.java
PublicClass TestCachedThreadPool {publicStaticVoid Main (String [] args) {// Créer un pool de threads qui peut réutiliser le nombre fixe de threads exécutorService pool = exécutors.newcachedThread pool (); Runnable Interface Thread T1 = New Mythread (); Exécuter dans Pool.Exécute (T1); } Résultat de sortie:
Pool-1-thread-2 s'exécute. . . Pool-1-thread-4 s'exécute. . . Pool-1-thread-3 s'exécute. . . Pool-1-thread-1 s'exécute. . . Pool-1-thread-5 est en cours d'exécution. . .
(4): NewscheduledThreadpool
TestScheduledThreadpoolExecutor.java
PublicClass TestsCheDuledThreadPoolExECUTOR {publicStaticVoid Main (String [] args) {ScheduledThreadPoolExecutor Exec = new ScheduledThreadPoolExecut tor (1); Jetez un nouveau RuntimeException (); ==============================================. =========. (System.NanoTime ());}}, 1000, 2000, TimeUnit.Millisecondes); Résultat de sortie
==============================================. ==============================================. ==============================================. ==============================================. ==============================================. =====