[java] Kotlin에 동시성 키워드가없는 이유는 무엇입니까?

동기화 / 동시성에 대한 키워드가없는 이유는 무엇입니까?

지금까지 내 연구는 한 가지 해결책을 제공합니다. 몇 가지 높은 수준의 클래스를 래핑하고이를 사용하여 동시성을 처리합니다.

순수 Kotlin 프로젝트에서 동시성 등을 처리하는 고도로 최적화 된 작은 구성 요소가 필요한 경우 어떻게해야합니까?

내 인상은 Kotlin이 Kotlin에서 코드의 90 %를 작성하지만 Kotlin으로 표현할 수없는 Java 코드를 포함하는 Java 용 지원 언어라는 것입니다.

이게 옳은 거니? 이것이 의도 된 방식입니까?



답변

코 루틴이 포함 된 Kotlin 1.1이 출시되었으며 함께 제공됩니다 async..await! 더 그것에 대해 읽기 코 틀린 참조 문서 , Kotlinx 코 루틴 라이브러리 및 깊이에있는이 위대한 예에 의해 Couroutines

Kotlin 코 루틴 외부에는 다음과 같은 옵션이 있습니다.

Java가 가진 모든 것을 갖추고 있습니다. 위의 목록에서 “동기화 및 잠금” 이라는 문구를 충족하면 언어 변경없이 훨씬 더 많이 사용할 수 있습니다. 모든 언어 기능은 조금 더 예쁘게 만듭니다.

따라서 작은 Kotlin 런타임, JDK의 JVM 런타임 및 사용하려는 기타 JVM 라이브러리를 사용하여 100 % Kotlin 코드를 가질 수 있습니다. Java 코드가 필요 없으며 Java (as-in JVM) 라이브러리 만 있으면됩니다.

몇 가지 기능에 대한 간단한 샘플 :

class SomethingSyncd {
    @Synchronized fun syncFoo() {

    }

    val myLock = Any()

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

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


답변

내 질문에 대한 실제 답변이 kotlin 토론의 깊이 어딘가에 있었기 때문에 내 질문에 답할 것입니다.

자바에서 왔을 때 저를 혼란스럽게 한 것은 동시성 키워드가 언어 키워드가 아니라 주석이었습니다. 나에게는 동기화와 같은 중요한 개념이 주석을 통해 처리된다는 것이 이상해 보였지만 이제는 완벽하게 이해됩니다. Kotlin은 플랫폼에 구애받지 않는 언어가되는 방향으로 가고 있으며, jvm에서만 작동하는 것이 아니라 거의 모든 작업을 수행 할 것입니다. 따라서 동기화 및 휘발성은 jvm에만 국한된 것이기 때문에 예를 들어 자바 스크립트에서는 필요하지 않을 수 있습니다.

간단히 말해서 kotlin은 자바가 가진 모든 것을 가지고 있으며 (패키지 가시성을 제외하고) 훨씬 더 많은 다른 언어가 가지고 있지 않은 큰 차이는 코 루틴입니다. 하지만 kotlin에서 할 수없는 자바로 작성할 수있는 것은 아무것도 없습니다 … (내가 아는 한)


답변