Kotlinマルチスレッドプログラミング

2034 ワード

  • Kotlinにはsynchronized、volatileキーワードはありません.KotlinのAnyはjavaのObjectに似ていますが、wait()、notify()、notifyAll()メソッドはありません.Kotlinはjavaのスレッドクラスをカプセル化することで,我々の符号化を簡素化した.また、javaの同期キーワードなど、特定の注釈を使用することができます.

  • スレッドの作成
    Javaでは通常、スレッドを作成するには、Threadクラスを拡張するか、構造関数を介してRunnableにインスタンス化するかの2つの方法があります.Kotlinではこの2つの方法も使用できます
  • オブジェクト式を使用して
  • を作成
    object : Thread() {
                override fun run() {
                    println("         ")
                }
            }.start()
    
  • Lambda式
  • を使用
       Thread {
              println("  Lambda   ")
          }.start()
    
  • Kotlinでカプセル化されたThread()関数は、以下のように
  • である.
    val t = Thread() {
                println("thread")
            }
            t.isDaemon = false
            t.name = "tThread"
            t.priority = 3
            t.start()
    

    Kotlinでは上のコードの方式を簡略化しました
     val t = thread(start = true, isDaemon = false, name = "thread", priority = 3) {
                println("thread")
            }
    

    実はKotlinはThreadを抽象的にカプセル化しています
    public fun thread(
        start: Boolean = true,
        isDaemon: Boolean = false,
        contextClassLoader: ClassLoader? = null,
        name: String? = null,
        priority: Int = -1,
        block: () -> Unit
    ): Thread {
        val thread = object : Thread() {
            public override fun run() {
                block()
            }
        }
        if (isDaemon)
            thread.isDaemon = true
        if (priority > 0)
            thread.priority = priority
        if (name != null)
            thread.name = name
        if (contextClassLoader != null)
            thread.contextClassLoader = contextClassLoader
        if (start)
            thread.start()
        return thread
    }
    
    

    同期メソッドとブロック
    synchronizedはKotlinキーワードではなく、@Synchronized注記に置き換えられます.
    @Synchronized
        fun appendText() {
            
        }
    

    可変フィールド
    Kotlinにはvolatileキーワードはありませんが@Volatile注記があり、JVMにはVolatileとマークされます
      @Volatile
        private var s = ""