En los últimos dos años de trabajo en Android, a través de la investigación del código fuente de Android, también comprenderé el procesamiento concurrente de Java de múltiples subprocesos.
Entonces, la pregunta es, ¿cómo implementar un grupo de hilos en serie?
¿Qué es una piscina de hilo en serie?
En otras palabras, nuestros objetos ejecutables deben tener un mecanismo de cola, que ingresa desde la cola de la cola en secuencia, y selecciona ejecutable desde la cabeza de la cola para su ejecución.
Como tenemos una idea, ¿consideremos la estructura de datos requerida?
Dado que estamos insertando el objeto ejecutable desde el final de la cola y ejecutando el objeto ejecutable desde la cabeza de la cola, naturalmente necesitamos una cola. El SDK de Java nos ha proporcionado una buena estructura de datos de cola, como la cola de doble extremo: Arraydeque <Runnable>.
import java.util.arrayDequ; import java.util.concurrent.blockingqueue; import java.util.concurrent.linkedblockingdeque; import java.util.concurrent.threadFactory; import java.util.concurrent.threadpoolexecutor; import java.util..TimeUnit; java.util.concurrent.atomic.atomicinteger;/*** Creado por Wzy el 16-1-5. */public class SeriaXECutor {private runnable Mactive; privado arrayDequ <nunnable> marrayDequ = new ArrayDequ <> (); Private static final int cpu_count = runtime.getRuntime (). Disponibleprocessors (); Private static final int core_pool_size = cpu_count + 1; Private static final int Maximum_pool_size = CPU_Count * 2 + 1; Private static final int ween_alive = 1; Private static final Bloquingqueue <Runnable> spoolworkQueue = new LinkedBlockingdeque <> (128); Private static final ThreadFactory SthreadFactory = new ThreadFactory () {Private final AtomicInteger mcount = new AtomicInteger (1); @Override public thread newThread (runnable r) {return new Thread (r, "Serial Thread #" + mCount.getAndIrcrement ()); }}; Private static final ThreadPoolExecutor Thread_Executor = new ThreadPoolExecutor (core_pool_size, maximum_pool_size, keep_alive, timeUnit.seconds, spoolworkqueue, shhreadFactory); public sincronizado void ejecute (final runnable r) {marrayDequ.offer (new runnable () {@Override public void run () {try {r.run ();} finalmente {schedulExt ();}}}); // Cuando la primera vez que se une a la cola, Mactive está vacía, por lo que debe llamar al método SchedulExtEXT manualmente si (Mactive == NULL) {schedulExtExt (); }} private void schedulEnext () {if ((mActive = MarrayDequ.Poll ())! = NULL) {Thread_Executor.Execute (Mactive); }} public static void main (string [] args) {SeriaExecutor seriaExExecutor = new SeriaXeCutor (); para (int i = 0; i <10; i ++) {final int j = i; SeriaXECUTOR.EXECUTE (new runnable () {@Override public void run () {System.out.println ("El num es:" + (j + 1)); try {hild.sleep (1000);} capt (interruptedException e) {e.printstacktrace ();}}); }}}Los resultados de la ejecución son los siguientes:
El número es: 1
El número es: 2
El número es: 3
El número es: 4
El número es: 5
El número es: 6
El número es: 7
El número es: 8
El número es: 9
El número es: 10
Lo anterior es todo el contenido de este artículo sobre el análisis de las instancias de la piscina de hilos en serie de la concurrencia de Java, y espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!