¿Por qué no hay palabras clave para sincronización / simultaneidad?
Hasta ahora, mi investigación me brinda una solución, envuelve algunas clases de alto nivel y las usa para manejar la concurrencia.
Dado un proyecto en Kotlin puro, ¿qué se debe hacer si se necesita un componente pequeño altamente optimizado que maneje la concurrencia, etc.?
Mi impresión es que Kotlin es un lenguaje de ayuda para Java, para escribir el 90% del código en Kotlin pero tiene algún código Java que no es posible expresar con Kotlin.
¿Es esto correcto? ¿Es así como se pretendía que fuera?
java
concurrency
kotlin
vach
fuente
fuente
Respuestas:
¡Kotlin 1.1 con Coroutines fue lanzado y trae consigo
async..await
! Lea más sobre esto en los documentos de referencia de Kotlin , la biblioteca de Kotlinx Coroutines y este gran Couroutines en profundidad por ejemploFuera de Kotlin Coroutines, tiene estas opciones:
@Synchronized
y@Volatile
anotaciones que se asignan directamente a las mismas palabras clave en Javasynchronized
bloques que en Kotlin provienen de una función en líneasynchronized()
.Kotlin.concurrent
paquete y extensiones con nuevas funciones y también extensiones para las clases JDK.java.util.concurrent
paquete , tales comoConcurrentHashMap
,CountdownLatch
,CyclicBarrier
,Semaphore
, ...java.util.concurrent.locks
paquete y Kotlin tiene extensiones para algunos de estos, incluida lawithLock()
función de extensión genial y extensionesread
/write
similares paraReentrantReadWriteLock
.java.util.concurrent.atomic
paquete , tales comoAtomicReference
,AtomicLong
, ...wait
ynotify
en objetosTienes todo lo que tiene Java y más. Su frase "sincronización y bloqueos" se satisface con la lista anterior, y luego tiene aún más y sin cambios de idioma. Cualquier característica del idioma solo lo haría un poco más bonito.
Por lo tanto, puede tener código 100% Kotlin, utilizando el tiempo de ejecución pequeño de Kotlin, el tiempo de ejecución de JVM del JDK y cualquier otra biblioteca de JVM que desee usar. No se necesita código Java, solo bibliotecas Java (como en JVM).
Una muestra rápida de algunas características:
class SomethingSyncd { @Synchronized fun syncFoo() { } val myLock = Any() fun foo() { synchronized(myLock) { // ... code } } @Volatile var thing = mapOf(...) }
fuente
CountDownLatch
solo muestras de Java portuarias, o para Kovenant, vea los documentos de la lib.Responderé mi propia pregunta ya que la respuesta real a mi pregunta estaba en algún lugar profundo de las discusiones de Kotlin.
Lo que me confundió en el momento en que venía de Java fue que las palabras clave de concurrencia no eran palabras clave de idioma, eran anotaciones. Me pareció extraño que conceptos importantes como la sincronización se manejaran a través de la anotación, pero ahora tiene mucho sentido. Kotlin va en la dirección de ser un lenguaje agnóstico de plataforma, no solo funcionará en jvm sino en casi cualquier cosa. Así que sincronizados y volátiles eran muy específicos de jvm, por lo que podrían no ser necesarios en javascript, por ejemplo.
En pocas palabras, kotlin tiene todo lo que tiene java (excepto la visibilidad del paquete) y mucho más, una gran diferencia que ningún otro lenguaje tiene son las corrutinas. Pero no hay nada que puedas escribir en java que no puedas hacer en kotlin ... (hasta donde yo sé)
fuente