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
- Problemas para get API de Meetup Token de acceso con modificación - Android
- Kotlin comtesting null dos veces en caso de que no
- AsyncTask en Android con Kotlin
- Firebase: vuelva a autenticar Google Auth ERROR (Id_token no válido en IdP)
- Kotlin Advertencia de security nula Tokens inesperados (uso; para separar expresiones en la misma línea)
- Mockito se burla de comportarse como espías: Kotlin
- ¿Cómo puedo get Kotlin enumerar los mismos comportamientos que los cpp
- Herencia explícita de Any in Kotlin - ¿Puede y cómo se hace?
- Referencia de método al organizador de properties
- Cómo llamar a la function de Javascript desde el código de Kotlin?
- Constructores de Kotlin: primarios y secundarios
- ¿Por qué algunos files de Kotlin muestran el ícono de candado?
- Obtener un error relacionado con el certificate al download Kotlin en Android Studio
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).
- Convierta methods obsoletos de Java a Kotlin
- RxAndroid, cómo detectar si observable ha finalizado la emisión