Kotlin 1.1 with Coroutines was released and it brings with it async..await! Read more about it in Kotlin reference docs, Kotlinx Coroutines library and this great in depth Couroutines by Example
Outside of the Kotlin Coroutines, you have these options:
- the Kovenant library adds Promises to Kotlin
- the Quasar library provides light-weight threads and continuations
@Synchronizedand@Volatileannotations which map directly to the same keywords in Javasynchronizedblocks which in Kotlin come from an inline functionsynchronized().- Kotlin has a
Kotlin.concurrentpackage and extensions with new functions and also extensions to JDK classes. - you can access anything in the
java.util.concurrentpackage such asConcurrentHashMap,CountdownLatch,CyclicBarrier,Semaphore, … - you can access anything in the
java.util.concurrent.lockspackage and Kotlin has extensions for a few of these including the coolwithLock()extension function and similarread/writeextensions forReentrantReadWriteLock. - you can access anything in the
java.util.concurrent.atomicpackage such asAtomicReference,AtomicLong, … - you can use
waitandnotifyon objects
You have everything Java has and more. Your phrase “synchronization and locks” is satisfied by the list above, and then you have even more and without language changes. Any language features would only make it a bit prettier.
So you can have 100% Kotlin code, using the small Kotlin runtime, the JVM runtime from the JDK, and any other JVM library you want to use. No need for Java code, just Java (as-in JVM) libraries.
A quick sample of some features:
class SomethingSyncd {
@Synchronized fun syncFoo() {
}
val myLock = Any()
fun foo() {
synchronized(myLock) {
// ... code
}
}
@Volatile var thing = mapOf(...)
}