Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Productor-Consumidor | Mejores Prácticas de Multithreading
Multithreading en Java

bookProductor-Consumidor

¡Excelente trabajo! Has recorrido un largo camino, y hemos explorado mucha teoría y ejemplos prácticos.

Es posible que hayas encontrado el patrón Producer-Consumer en otras secciones, pero quizás no te diste cuenta. En esta sección, lo discutiremos en detalle, y si algo de los ejemplos anteriores no estaba claro, quedará claro en esta sección.

El patrón Producer-Consumer implica dos tipos de hilos, que son evidentes por el nombre: Productor y Consumidor.

El Producer generará algunos datos que colocará en un búfer/cola compartido al que el Consumer también tiene acceso, y simplemente consumirá estos datos desde la ubicación de almacenamiento de datos.

Note
Nota

El objetivo principal del patrón es separar la producción y el consumo de datos, permitiendo que los productores funcionen de manera independiente de los consumidores.

Dónde se utiliza

Este patrón se emplea comúnmente en sistemas donde se requiere procesamiento de datos asíncrono. Más adelante analizaremos en detalle qué significa asynchrony.

En la práctica, este patrón se utiliza con frecuencia para sistemas de procesamiento de eventos, registro de datos, manejo de solicitudes de red y procesamiento de datos en paralelo.

Imagina una cinta transportadora en una fábrica donde un trabajador coloca piezas en la cinta (productor) y otro trabajador las retira y ensambla en un producto (consumidor). El productor y el consumidor pueden operar a diferentes velocidades, pero la cinta (búfer) les ayuda a mantenerse sincronizados.

¿Cómo se ve en el código?

Consideremos un ejemplo de uso de BlockingQueue para implementar el patrón Producer-Consumer.

Note
Nota

Puede cambiar entre pestañas, y así accederá al código que necesita.

ExampleProducerConsumer.java

ExampleProducerConsumer.java

Consumer.java

Consumer.java

Producer.java

Producer.java

copy
12345678910
public class ExampleProducerConsumer { public static void main(String[] args) { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); // Shared queue Thread producerThread = new Thread(new Producer(queue)); Thread consumerThread = new Thread(new Consumer(queue)); producerThread.start(); // Start producer thread consumerThread.start(); // Start consumer thread } }

Este programa muestra el patrón Producer-Consumer utilizando BlockingQueue para garantizar interacciones seguras entre hilos.

Se establece una BlockingQueue para actuar como un búfer compartido para los hilos Producer y Consumer.

La clase Producer genera números del 0 al 9 y los añade a la cola, y luego coloca un valor de señalización -1 para indicar que la producción ha finalizado.

La clase Consumer recupera repetidamente números de la cola. Cuando encuentra el valor de señalización -1, deja de consumir.

En el método principal, se inicializa la cola compartida y se crean y arrancan los hilos de productor y consumidor. El Producer añade elementos a la cola mientras el Consumer procesa estos elementos.

¿Por qué se utiliza?

El patrón Producer-Consumer se utiliza para lograr varios objetivos:

  • Sincronización de hilos: Permite que los hilos intercambien datos de manera segura;
  • Mejora del rendimiento: Los productores y consumidores pueden trabajar en paralelo sin bloquearse mutuamente;
  • Buffering: El búfer ayuda a equilibrar las diferencias en las velocidades de producción y consumo.
Note
Nota

El patrón Producer-Consumer ayuda a organizar una interacción segura y eficiente entre hilos en la programación multihilo. Permite que productores y consumidores trabajen de forma independiente utilizando un búfer para la sincronización, lo que mejora el rendimiento y previene bloqueos.

1. ¿Qué función cumple la clase Producer en el patrón Productor-Consumidor?

2. ¿Qué hace el valor de señal -1 en el programa de ejemplo dado?

question mark

¿Qué función cumple la clase Producer en el patrón Productor-Consumidor?

Select the correct answer

question mark

¿Qué hace el valor de señal -1 en el programa de ejemplo dado?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain how BlockingQueue works in the Producer-Consumer pattern?

What are some real-world scenarios where the Producer-Consumer pattern is useful?

Can you show a simple code example of the Producer-Consumer pattern?

Awesome!

Completion rate improved to 3.33

bookProductor-Consumidor

Desliza para mostrar el menú

¡Excelente trabajo! Has recorrido un largo camino, y hemos explorado mucha teoría y ejemplos prácticos.

Es posible que hayas encontrado el patrón Producer-Consumer en otras secciones, pero quizás no te diste cuenta. En esta sección, lo discutiremos en detalle, y si algo de los ejemplos anteriores no estaba claro, quedará claro en esta sección.

El patrón Producer-Consumer implica dos tipos de hilos, que son evidentes por el nombre: Productor y Consumidor.

El Producer generará algunos datos que colocará en un búfer/cola compartido al que el Consumer también tiene acceso, y simplemente consumirá estos datos desde la ubicación de almacenamiento de datos.

Note
Nota

El objetivo principal del patrón es separar la producción y el consumo de datos, permitiendo que los productores funcionen de manera independiente de los consumidores.

Dónde se utiliza

Este patrón se emplea comúnmente en sistemas donde se requiere procesamiento de datos asíncrono. Más adelante analizaremos en detalle qué significa asynchrony.

En la práctica, este patrón se utiliza con frecuencia para sistemas de procesamiento de eventos, registro de datos, manejo de solicitudes de red y procesamiento de datos en paralelo.

Imagina una cinta transportadora en una fábrica donde un trabajador coloca piezas en la cinta (productor) y otro trabajador las retira y ensambla en un producto (consumidor). El productor y el consumidor pueden operar a diferentes velocidades, pero la cinta (búfer) les ayuda a mantenerse sincronizados.

¿Cómo se ve en el código?

Consideremos un ejemplo de uso de BlockingQueue para implementar el patrón Producer-Consumer.

Note
Nota

Puede cambiar entre pestañas, y así accederá al código que necesita.

ExampleProducerConsumer.java

ExampleProducerConsumer.java

Consumer.java

Consumer.java

Producer.java

Producer.java

copy
12345678910
public class ExampleProducerConsumer { public static void main(String[] args) { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); // Shared queue Thread producerThread = new Thread(new Producer(queue)); Thread consumerThread = new Thread(new Consumer(queue)); producerThread.start(); // Start producer thread consumerThread.start(); // Start consumer thread } }

Este programa muestra el patrón Producer-Consumer utilizando BlockingQueue para garantizar interacciones seguras entre hilos.

Se establece una BlockingQueue para actuar como un búfer compartido para los hilos Producer y Consumer.

La clase Producer genera números del 0 al 9 y los añade a la cola, y luego coloca un valor de señalización -1 para indicar que la producción ha finalizado.

La clase Consumer recupera repetidamente números de la cola. Cuando encuentra el valor de señalización -1, deja de consumir.

En el método principal, se inicializa la cola compartida y se crean y arrancan los hilos de productor y consumidor. El Producer añade elementos a la cola mientras el Consumer procesa estos elementos.

¿Por qué se utiliza?

El patrón Producer-Consumer se utiliza para lograr varios objetivos:

  • Sincronización de hilos: Permite que los hilos intercambien datos de manera segura;
  • Mejora del rendimiento: Los productores y consumidores pueden trabajar en paralelo sin bloquearse mutuamente;
  • Buffering: El búfer ayuda a equilibrar las diferencias en las velocidades de producción y consumo.
Note
Nota

El patrón Producer-Consumer ayuda a organizar una interacción segura y eficiente entre hilos en la programación multihilo. Permite que productores y consumidores trabajen de forma independiente utilizando un búfer para la sincronización, lo que mejora el rendimiento y previene bloqueos.

1. ¿Qué función cumple la clase Producer en el patrón Productor-Consumidor?

2. ¿Qué hace el valor de señal -1 en el programa de ejemplo dado?

question mark

¿Qué función cumple la clase Producer en el patrón Productor-Consumidor?

Select the correct answer

question mark

¿Qué hace el valor de señal -1 en el programa de ejemplo dado?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1
some-alt