Dlaczego w Kotlinie nie ma słów kluczowych dotyczących współbieżności?
Po prostu zanurzam się w tym niesamowitym języku, a ta jedna rzecz jest dla mnie frustrująca. Dlaczego nie ma słów kluczowych do synchronizacji?
Jak na razie moje badania dają jedno rozwiązanie, owijasz kilka klas wysokiego poziomu i używasz ich do obsługi współbieżności...
Biorąc pod uwagę projekt na czystym kotlinie, co należy zrobić, jeśli istnieje potrzeba małego, wysoce zoptymalizowanego komponentu, który obsługuje współbieżność itp... Mam wrażenie, że kotlin jest językiem pomocniczym dla Javy, pisząc 90% z kod w kotlinie, ale mają jakiś kod java, który nie jest możliwy do wyrażenia za pomocą Kotlina.
Czy to prawda? Tak miało być?
1 answers
Kotlin 1.1 Z Koroutinami został wydany {[24] } i przynosi ze sobą async..await
! Przeczytaj więcej na ten temat w Kotlin reference docs, Biblioteka Kotlinx Coroutines i ta wielka głębia Coroutines na przykładzie
Poza Koroutinami Kotlina masz następujące opcje:
- Biblioteka Kovenant dodaje obietnice do Kotlina
- Biblioteka kwazarów zapewnia lekkie wątki i kontynuacje
-
@Synchronized
oraz@Volatile
adnotacje, które mapują bezpośrednio do tych samych słów kluczowych w Javie -
synchronized
bloki, które w Kotlinie pochodzą z funkcji inlinesynchronized()
. - Kotlin ma
Kotlin.concurrent
pakiet i rozszerzenia z nowymi funkcjami, a także rozszerzenia do klas JDK. - możesz uzyskać dostęp do wszystkiego w
java.util.concurrent
pakiet taki jakConcurrentHashMap
,CountdownLatch
,CyclicBarrier
,Semaphore
, ... - możesz uzyskać dostęp do wszystkiego w
java.util.concurrent.locks
Pakiet i Kotlin ma rozszerzenia dla kilku z nich w tym fajnewithLock()
funkcja rozszerzenia i podobneread
/write
rozszerzenia dlaReentrantReadWriteLock
. - możesz uzyskać dostęp do wszystkiego w
java.util.concurrent.atomic
pakiet taki jakAtomicReference
,AtomicLong
, ... - możesz użyć
wait
inotify
na obiektach
Masz wszystko, co ma Java i nie tylko. Twoja fraza "synchronizacja i blokady" jest spełniona przez lista powyżej, a potem masz jeszcze więcej i bez zmian językowych. Wszelkie funkcje językowe uczyniłyby go tylko nieco ładniejszym.
Więc możesz mieć 100% Kod Kotlina, używając małego środowiska uruchomieniowego Kotlin, środowiska uruchomieniowego JVM z JDK i każdej innej biblioteki JVM, której chcesz użyć. Nie potrzeba kodu Javy, tylko biblioteki Javy (jak w JVM).
Krótka próbka niektórych funkcji:
class SomethingSyncd {
@Synchronized fun syncFoo() {
}
val myLock = Any()
fun foo() {
synchronized(myLock) {
// ... code
}
}
@Volatile var thing = mapOf(...)
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-03 15:56:31