Kotlin sincronizado

Estuve estudiando multi hilo de Java en las últimas semanas. Aprendí acerca de synchronization, y entendí que sincronizados evitaba que varios hilos accedieran a la misma propiedad al mismo time. Escribí este código para ejecutar dos hilos en el mismo hilo.

val gate = CyclicBarrier(3) val obj = SynchronizedCounter() var nah = object : Thread() { override fun run() { gate.await() obj.increment() } } var blah = object : Thread() { override fun run() { gate.await() println(obj.value()) } } nah.start() blah.start() gate.await() class SynchronizedCounter { private var c = 0 @Synchronized fun increment() { c++ } @Synchronized fun decrement() { c-- } @Synchronized fun value(): Int { return c } } 

Salida: 0 ¿No devolvería 1? Porque el segundo hilo se ejecuta después de uno

Tanto nah como blah configuran trabajos para ejecutar en un hilo diferente al suyo. Entonces, cuando cada llamada start , solo están marcando el progtwigdor de subprocesss para iniciarlos. start vuelve inmediatamente y el hilo actual continúa ejecutando la línea principal de código hasta que algo sucede para hacerlo diferir. En ese punto, el progtwigdor lo hace, ejecutando todo lo que está listo y esperando para ejecutarse. No debe esperar una order en particular, ni debe intentar pnetworkingecir una order. Es por eso que tienes construcciones de synchronization para usar en tu código.

Podrías ejecutar tus tareas en un Ejecutor de un solo hilo como en esta respuesta SO (para java, sin embargo, tendrías que adaptarte).

  • Java modifica el contenido de la class kotlin a nulo
  • ¿Puedo actualizar un object inmutable profundamente nested sin tomar conciencia de su context?
  • Hamburger Icon No se muestra
  • Tipos generics y polymorphism
  • RxJava usando Kotlin - cómo sincronizar 2 methods asíncronos, refactorizar desde Java
  • JNI GetShortArrayElements falla con SIGSEGV SEGV_ACCERR
  • Advertencia obsoleta de Kotlin Runtime (complemento Kotlin 1.1.2-release-Studio2.3-3)
  • Conversor de Java a Kotlin y arguments de método nulable
  • Funciones previas en Kotlin: buenas prácticas
  • Kotlin - "No me importa" en desugaring de la class de datos
  • ¿Puedo crear un método de extensión Kotlin para agregar una suscripción rxJava a una suscripción compuesta?