Correctamente implementando esperar y notificar en Kotlin

Según este documento, no se wait utilizar wait and notify en Kotlin: https://kotlinlang.org/docs/reference/java-interop.html

wait () / notify ()

El artículo 69 eficaz de Java sugiere gentilmente que prefiera las utilidades de concurrency a wait () y notify (). Por lo tanto, estos methods no están disponibles en las references de tipo Cualquiera.

Sin embargo, el documento no propone ninguna forma correcta de hacerlo.

Básicamente, me gustaría implementar un service que lea los datos de input y los procese. Si no hubiera datos de input, se suspendería hasta que alguien notifique que hay nuevos datos de input. Algo como

 while (true) { val data = fetchData() processData(data) if (data.isEmpty()) { wait() } } 

EDITAR:

No quiero utilizar estos methods no recomendados (antipatrones), realmente quiero saber cómo hacerlo correctamente.

En mi caso, fetchData lee datos de la database, por lo que las queues en mi caso no se pueden usar.

Un BlockingQueue puede ser una utilidad de concurrency de alto nivel adecuada para su caso de uso, pero aplicarlo requiere conocer y modificar la estructura de su código.

La idea es que fetchData() debe .take() un elemento de la queue, y si la queue está vacía, eso bloqueará la ejecución hasta que aparezca un elemento, lo que elimina el .wait() en el código. El productor de los datos debe .put(t) los datos en la queue.


Si realmente necesita usar wait and notify , por ejemplo para implementar una utilidad de concurrency a bajo nivel, puede lanzar un object Kotlin a java.lang.Object y llamar a estas funciones después, como se indica en la reference del lenguaje . O, escrito como funciones de extensión:

 @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") private fun Any.wait() = (this as java.lang.Object).wait() 
  • Crear una ArrayList de elementos únicos en una ArrayList
  • Dagger 2 - Inyectar con valor pnetworkingeterminado en el constructor
  • ¿Es posible usar doReturn () y CALLS_REAL_METHODS con mockito-kotlin?
  • ¿Hay alguna manera de escribir una function de extensión que cambie el valor del object?
  • Creando un nuevo proyecto en Android studio-Kotlin error
  • Error de time de ejecución de Kotlin SAM: NoSuchMethodError: no hay método estático
  • Tiempo de ejecución obsoleto de Kotlin
  • Sitio Android: las consultas sincrónicas devuelven nulo
  • Error: ejecución fallida para la tarea ': app: compileDebugKotlin'. > Error de compilation. Ver logging para más detalles
  • Seleccionar datos de dos tablas en Kotlin Anko
  • La aplicación del complemento Realm en el proyecto Kotlin produce un error de compilation