两线程交叉打印奇偶数

复制代码
package johnnyLearning

import java.lang.Exception

/**
 * two thread to print odd and even number
 * */
class solution {
    val lock = java.lang.Object()
    val num = 0

    fun printTwoNumber() {
        val thread1 = PrintThread(num, true, lock)
        val thread2 = PrintThread(num, false, lock)
        thread1.start()
        thread2.start()
    }

    class PrintThread public constructor(num_: Int, showOdd_: Boolean, lock_: java.lang.Object) : Thread() {

        var num = num_
        val showOdd = showOdd_
        val lock = lock_

        override fun run() {
            super.run()
            while (true) {
                synchronized(lock) {
                    when (showOdd) {
                        true -> {
                            if (num % 2 == 0) {
                                lock.notify()//get lock before print
                                println("odd: $num")
                                lock.wait()//hand over lock after print
                            }
                        }
                        false -> {
                            if (num % 2 != 0) {
                                lock.notify()
                                println("even: $num")
                                lock.wait()
                            }
                        }
                    }//end when
                }
                num++
                try {
                    if (num > 30) {
                        break;
                    }
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            }//end while
            println("thread stop")
        }
    }
}
复制代码

测试:

 val solution = johnnyLearning.solution()
 solution.printTwoNumber()

输出:

复制代码
odd: 0
even: 1
odd: 2
even: 3
odd: 4
even: 5
odd: 6
even: 7
odd: 8
even: 9
odd: 10
even: 11
odd: 12
even: 13
odd: 14
even: 15
odd: 16
even: 17
odd: 18
even: 19
odd: 20
even: 21
odd: 22
even: 23
odd: 24
even: 25
odd: 26
even: 27
odd: 28
even: 29
odd: 30
thread stop
复制代码

 

posted @   johnny_zhao  阅读(349)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示