2016-02-20 9 views
28

Mi sto semplicemente immergendo in questo linguaggio fantastico, e questa cosa è frustrante per me. Perché non ci sono parole chiave per la sincronizzazione?Perché non ci sono parole chiave di concorrenza in Kotlin?

Finora la mia ricerca rinuncia un'unica soluzione, si avvolge alcune classi di alto livello e li usa per gestire la concorrenza ...

dato un progetto sulla pura Kotlin, ciò che si deve fare se v'è la necessità per le piccole componente altamente ottimizzato che gestisce la concorrenza ecc ... La mia impressione è che kotlin sia un linguaggio di supporto per java, per scrivere il 90% del codice in kotlin ma avere un codice java che non è possibile esprimere con kotlin.

È giusto? È così che doveva essere?

+0

https://discuss.kotlinlang.org/t/concurrency-in-kotlin/858 –

+14

Kotlin è sincronizzato blocchi (https://kotlinlang.org/ api/latest/jvm/stdlib/kotlin/synchronized.html), metodi sincronizzati (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-synchronized /), campo volatile (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-volatile/index.html). E può usare le classi java.util.concurrent. Cosa stai cercando esattamente? –

+0

Hai più di una domanda qui, dovresti concentrarti su un argomento. Quali cose di concorrenza pensi che manchi, specifichi qualcosa che mi suona come se non mancasse. Quindi l'altra domanda non è in realtà una domanda SO ed è basata sull'opinione (e non è una asserzione corretta). –

risposta

54

Kotlin 1.1 with Coroutines was released e porta con sé async..await! Per saperne di più su di esso nel Kotlin reference docs, Kotlinx Coroutines library e questa grande profondità Couroutines by Example

Al di fuori delle coroutine Kotlin, ci sono queste opzioni:

Hai tutto Java ha e altro ancora. La tua frase "sincronizzazione e blocchi" è soddisfatta dall'elenco sopra, e quindi hai ancora di più e senza cambiamenti di lingua. Qualsiasi caratteristica linguistica lo renderebbe solo un po 'più carino.

Quindi è possibile avere il 100% del codice Kotlin, utilizzando il piccolo runtime di Kotlin, il runtime JVM dal JDK e qualsiasi altra libreria JVM che si desidera utilizzare. Nessuna necessità di codice Java, solo librerie Java (come in JVM).

Un campione rapido di alcune caratteristiche:

class SomethingSyncd { 
    @Synchronized fun syncFoo() { 

    } 

    val myLock = Any() 

    fun foo() { 
     synchronized(myLock) { 
      // ... code 
     } 
    } 

    @Volatile var thing = mapOf(...) 
} 
+0

Qualche esempio? cos se scrivo sincronizzare sul metodo non lo prenderò mai ... lo stesso con volatile ... – vach

+1

@vach Ho dato collegamenti nel mio commento, sotto la tua domanda. Sincronizzate e volatili sono annotazioni. –

+0

@vach se hai il codice che hai provato, dovrebbe essere incluso nella tua domanda insieme a qualsiasi messaggio di errore. –