Red de conocimiento informático - Conocimiento sistemático - ¿Está completamente oscuro bajo las luces? Los hechos han demostrado que el grupo de subprocesos es el modelo de productor-consumidor más típico.

¿Está completamente oscuro bajo las luces? Los hechos han demostrado que el grupo de subprocesos es el modelo de productor-consumidor más típico.

Utilice Thread para iniciar un hilo:

Por supuesto, normalmente ejecutamos el método de inicio.

Si usa un hilo para iniciar un hilo: el hilo secundario necesita pasar por el ciclo de vida de creación y destrucción cada vez, y el rendimiento no es bueno.

Para resolver este problema, JDK diseñó un grupo de subprocesos.

BlockingQueue de JDK implementa naturalmente el modelo productor-consumidor, es decir, cuando la cola está llena, la cola de venta se bloqueará; cuando la cola esté vacía, se bloqueará el método get;

Después de que se inicia el subproceso de trabajo en el grupo de subprocesos. Utilice un bucle while para consumir Runnable en BlockingQueue. Si la tarea obtenida durante el ciclo while está vacía, el hilo de trabajo se cierra. Es por eso que la cantidad máxima de subprocesos y la cantidad de subprocesos centrales que exceden el tiempo de inactividad se pueden reciclar automáticamente.

El número de tiempo de inactividad del hilo principal KeepAliveTime. De hecho, bloquea la cola para obtener el tiempo máximo de espera para la ejecución. Cuando se configura este parámetro y se excede el tiempo máximo de espera, se devolverá una tarea vacía. Cuando el bucle while en el método de ejecución del subproceso de trabajo es nulo, finaliza el subproceso de trabajo.

Si el elemento obtenido por encuesta está vacío, entonces la monitorización finalizará y se ejecutará el método de ejecución del hilo de trabajo.

Cuando se devuelve nulo, el valor de "el subproceso de trabajo comenzará a monitorear el bucle while" finalizará la operación de monitoreo del subproceso de trabajo.

Cuando los productores colocan mensajes en BlockingQueue, no utilizan el método put;

Estrategia de rechazo: debido a que el método de oferta devuelve falso, significa que la cola de bloqueo está llena. Si el número máximo de subprocesos es mayor que el número de subprocesos principales, siga abriendo subprocesos de trabajo. Si se inicia un subproceso de trabajo con el número máximo de subprocesos, se aplicará la política de denegación configurada.

Sabemos anteriormente que el productor usa el método de oferta cuando lo coloca en la cola y devuelve falso directamente cuando la cola de bloqueo está llena. Podemos usar put para bloquear el hilo principal. No hay tareas en BlockingQueue.

Simultaneidad JAVA (12): los bloqueos implementan productores y consumidores.

Concurrencia JAVA (13): principio de implementación del ejecutor del grupo de subprocesos (análisis de código fuente)