Pregunta

Tengo dos hilos. El subproceso A está extrayendo algunos elementos de la cola y el subproceso B está agregando algunos elementos a la cola.

Quiero que el subproceso A se ponga en suspensión cuando la cola esté vacía.

Cuando el subproceso B agrega algún elemento a la cola, debe asegurarse de que el subproceso A esté funcionando. ¿Cómo se puede hacer esto en Java?

¿Fue útil?

Solución

Utilice un BlockingQueue , que es:

  

Una Queue que además admite operaciones que esperan a que la cola deje de estar vacía al recuperar un elemento, y espere a que haya espacio disponible en la cola al almacenar un elemento.

En serio, no intentes reinventar la rueda aquí.





(Si debe usar esperar / notificar, lea este tutorial . ¡Pero ahorrate el dolor, por favor!)

Otros consejos

Aquí hay algunos detalles:

import java.concurrent.Executors;
import java.concurrent.ExecutorService;
...
ExecutorService executor = Executors.newFixedThreadPool(someNumberOfThreads);
...
executor.execute(someObjectThatImplementsRunnable);
...
executor.shutdownNow();

Eso es todo con las nuevas capacidades de subprocesamiento de Java. Executor es un grupo de subprocesos con algunosNumberOfThreads en él. Se alimenta por una cola de bloqueo. Todos los hilos duermen a menos que haya trabajo por hacer. Cuando inserta un objeto Runnable en la cola usando el método execute (), el objeto Runnable se sienta en la cola hasta que haya un hilo disponible para procesarlo. Entonces, se llama al método run (). Finalmente, el método shutdownNow () le indica a todos los subprocesos del grupo que se apaguen.

Ahora es mucho más simple de lo que solía ser.

(Hay muchas variaciones al respecto, como grupos con un número mínimo y máximo de subprocesos, o colas que tienen tamaños máximos antes de que los subprocesos que ejecuten execute () se bloqueen).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top