Kotlin ノート スレッド (11)

Kotlin ノート スレッド (11)

Kotlin ノートのデータ型 (1) Kotlin ノートの文字列 (2) Kotlin ノートの演算子 (3) Kotlin ノートの関数 (4) Kotlin ノートのオブジェクト指向 (5) Kotlin ノートの継承、抽象クラス、インターフェース (6) Kotlin ノートの高次関数(7) Kotlin Notes Generics (8) Kotlin Notes データコンテナ (9) Kotlin Notes 関数型プログラミング API (10)










1.スレッド作成

fun main(args: Array<String>) {
    
    

//    public fun thread(
//        start: Boolean = true,  //创建完成是否马上启动
//        isDaemon: Boolean = false, // 是否为守护线程 守护线程是
//一种在后台长期运行线程,守护线程主要提供一些后台服务,它的生命周期与Java虚拟机
//一样长
//        contextClassLoader: ClassLoader? = null, // 类加载器,用来加载一些资源等;
//        name: String? = null, //指 定线程名,如果不指定线程名
//        priority: Int = -1,  //设置线程优先 级
//        block: () -> Unit //是线程要执行的核心代码。
//    ): Thread

    thread {
    
    
        run()
    }

    thread (name = "zyb"){
    
    
        run()
    }


}

fun run(){
    
    
    for(i in 0..9){
    
    
        println("第${i}次执行 - ${currentThread().name}")
// 随机生成休眠时间
        val sleepTime = (1000 * random()).toLong()
// 线程休眠
        sleep(sleepTime)
    }
    println("执行完成! " + currentThread().name)

}

2.スレッドの状態

  1. 新しい状態
    新しい状態 (New) は、空のスレッド オブジェクトである Thread をインスタンス化することによってスレッド オブジェクトを作成することです

  2. 新しいスレッドの start() 関数が準備完了状態で作成された後
    、準備完了状態 (Runnable) に入ります。この時点では
    、スレッドは実際にはスレッド本体の実行を開始していません。CPU のスケジューリングを待つ必要があります。

  3. 実行中状態
    CPU のスケジューリング準備完了状態のスレッド、スレッドが実行中状態 (Running) に入り、実行中状態のスレッドが CPU を
    占有し、スレッド本体の実行が完了する

  4. ブロック状態では、
    何らかの理由で実行状態のスレッドが非実行状態、つまりブロック状態 (Blocked) になり、
    ブロック状態のスレッドの Java 仮想マシン システムはスレッドを実行できず、 CPU がアイドル状態であっても、
    スレッドを実行することはできません。次の理由により、スレッドはブロック状態になります。

  • 現在のスレッドはスリープ関数を呼び出し、スリープ状態に入ります。
  • join 関数は、他のスレッドが終了するのを待って、他のスレッドによって呼び出されます。
  • I/O 要求を発行し、I/O 操作が完了するまで待ちます。
  • 現在のスレッドが待機関数を呼び出します。
  1. デッド状態
    スレッドがスレッド本体を実行した後、デッド状態 (Dead) に入ります. デッド状態に入るスレッドは、
    通常の実行後に入る場合と、例外によって入る場合があります。

3.スレッド管理

1、参加する

現在のスレッドで子スレッドの join メソッドを呼び出すと、現在のスレッドがブロックされ、子スレッドが最初に実行されます。

fun main(args: Array<String>) {
    
    
    var thread1=thread {
    
    
        run()
    }
    thread1.join()
    var thread2=thread (name = "zyb"){
    
    
        run()
    }


}

fun run( ){
    
    
    for(i in 0..9){
    
    
        println("第${i}次执行 - ${currentThread().name}")
// 随机生成休眠时间

        val sleepTime = (1000 * random()).toLong()
// 线程休眠
        sleep(sleepTime)
    }
    println("执行完成! " + currentThread().name)

}0次执行 - Thread-01次执行 - Thread-02次执行 - Thread-03次执行 - Thread-04次执行 - Thread-05次执行 - Thread-06次执行 - Thread-07次执行 - Thread-08次执行 - Thread-09次执行 - Thread-0
执行完成! Thread-00次执行 - zyb
第1次执行 - zyb
第2次执行 - zyb
第3次执行 - zyb
第4次执行 - zyb
第5次执行 - zyb
第6次执行 - zyb
第7次执行 - zyb
第8次执行 - zyb
第9次执行 - zyb
执行完成! zyb

おすすめ

転載: blog.csdn.net/baidu_31956557/article/details/109311230