Java avanzado: implementación de un grupo de búfer de subprocesos simple[1]
En las aplicaciones, a menudo necesitamos que el grupo de búfer de subprocesos haga algo para mejorar la eficiencia y la concurrencia del programa. Este artículo demuestra cómo utilizar la estructura de datos de la cola para implementar un grupo de búfer de subprocesos simple.
Un grupo de búfer de subprocesos se puede diseñar de la siguiente manera: el grupo de búfer consta de varios subprocesos en funcionamiento y una cola. El cliente es responsable de colocar las tareas en la cola (método put), y el subproceso en funcionamiento elimina estas tareas. gire y los ejecute (método get)
Una implementación clásica de Queue es usar una matriz cíclica (esta implementación se presenta en muchos libros de estructura de datos, por ejemplo, una matriz de tamaño, esta matriz cíclica). se puede imaginar como un anillo conectado de extremo a extremo. El más antiguo apunta a la ubicación de los datos más antiguos en la cola. El siguiente apunta a la siguiente ubicación donde se pueden colocar los nuevos datos.
Después de colocar un nuevo dato en el siguiente. ubicación, el siguiente debe actualizarse siguiente siguiente = (siguiente + ) % tamaño;
Después de recuperar los datos de la posición más antigua, debe actualizar el más antiguo = (más antiguo + ) % tamaño
Cuando más antiguo == siguiente, la cola está vacía
La cola está llena cuando (siguiente + ) % tamaño == más antiguo
(Tenga en cuenta que para distinguir entre cola vacía y llena, de hecho, se pueden colocar datos de hasta un tamaño en la cola)
Debido a que varios subprocesos accederán a esta cola al mismo tiempo, debe considerarlo. cómo funciona la cola en este caso. Primero, la cola debe ser segura para subprocesos. Puede utilizar la palabra clave sincronizada en Java para asegurarse de que solo haya un subproceso accediendo a la cola. También podemos notar que cuando la cola está vacía, no se puede realizar la operación de obtención; cuando la cola está llena, no se puede realizar la operación de colocación. Cuando el acceso multiproceso encuentra esta situación, generalmente un subproceso que desea realizar una operación puede hacerlo. esperar (bloquear) hasta que la operación pueda continuar. Por ejemplo, cuando un subproceso ejecuta el método get en una cola vacía, el subproceso debe esperar (bloquear) hasta que otro subproceso ejecute el método put de la cola. ) El método notify() del objeto Object en Java proporciona dicha función lishixinzhi/Article/program/Java/hx/201311/27224