Kotlin - 线程 Thread

一、开启线程方式

1.1 使用 object

object : Thread() {
    override fun run() {
        println("使用object")
    }
}.start()

1.2 使用 Lambda

Thread {
    println("使用lambda")
}.start()

1.3 使用函数

//start:是否立即执行。传参false的话,用返回值手动调用start()
//isDaemon:是否是守护线程,当运行的全是守护线程JVM退出
//contextClassLoader:类加载器,用来加载这个线程的类和资源
thread(start = true, isDaemon = false, contextClassLoader = null, name = "t2", priority = 3) {
    Thread.sleep(1000)
    println("使用函数")
}.start()

1.4 继承 Thread

class T4 : Thread() {
    override fun run() {
        println("继承Thread类")
    }
}

1.5 实现 Runnable

class T5 : Runnable {
    override fun run() {
        println("实现Runnable接口")
    }
}

二、同步

2.1 @synchronized

@Synchronized    //和Java中的synchronized关键字相同。
fun method() { }

2.3 synchronized( )

//为了同步多个并行任务的结果则需要声明n个锁,即需嵌套n个synchronized。
fun method() {
    val lock = "hello"
    Thread {
        synchronized(lock) {}
        synchronized(Unit) {}
    }.start()
}

2.4 join( )

lateinit var str1: String
lateinit var str2: String
fun method() {
    val t1 = thread(start = true) { str1 = "AAA" }
    val t2 = thread(start = true) { str2 = "BBB" }
    t1.join()
    t2.join()
    show(str1, str2)
}
fun show(str1: String, str2: String) = println("${str1}、${str2}")

2.5 ReentrantLock( )

val lock = ReentrantLock()
Thread {
    lock.lock()     //上锁
    s1 = task1()    //耗时操作
    lock.unlock()   //解锁
}.start()

2.6 @volatile

@Volatile    //和Java中的Volatile关键字相同。
private var tag = false

fun start() {
    tag = true
    thread(start = true) {
        var count = 0
        while (tag) {
            Thread.sleep(100)
            count++
            println(count)
        }
    }
}

fun stop() {
    tag = false
}

fun main() {
    thread(start = true) {
        start()
        Thread.sleep(1000)
        stop()
    }
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值