Pregunta

Tengo una bandera simple de "reproducir/pausar".Imagine un hilo de hacedor:

 private final Thread backgroundDoer = new Thread(() -> {
       while(true) {
           doOperation();
           playFlag.await();
       }
})

Así que continúe realizando una operación a menos que el indicador sea falso, en cuyo caso espere a que el indicador sea verdadero para continuar.

Mi pregunta es cómo hacer esto correctamente en Java.Realmente no puedo usar un Condition porque necesitaría seguir señalándolo desde afuera.Ahora mismo estoy usando un Semaphore.Cuando se presiona "reproducir" le doy muchos permisos, cuando se presiona pausa los borro todos.Aunque parece torpe y estúpido.¿Alguna forma mejor?

¿Fue útil?

Solución

Simplemente podría adquirir el permiso (use un binario Semaphore) y suéltelo inmediatamente.

Si las cosas no se han pausado, simplemente lo adquirirá y lo devolverá (permitiendo que la pausa lo adquiera si se llama), continuando con la operación.Pero si se produjo una pausa, se bloqueará tan pronto como se intente adquirir.

while(true) {
    doOperation();
    semaphore.acquire();   // Block if paused
    semaphore.release();   // Release immediately, so pause() can acquire() the semaphore
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top