Kotlin笔记 线程(十一)
Kotlin笔记数据类型(一)
Kotlin笔记字符串(二)
Kotlin笔记运算符(三)
Kotlin笔记函数(四)
Kotlin笔记面向对象(五)
Kotlin笔记继承、抽象类、接口(六)
Kotlin笔记高阶函数(七)
Kotlin笔记泛型(八)
Kotlin 笔记 数据容器(九)
Kotlin笔记函数式编程API(十)
一、线程创建
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)
}
二、线程状态
-
新建状态
新建状态(New)是通过实例化Thread创建线程对象,它仅仅是一个空的线程对
象 -
就绪状态
新建线程的start()函数后,它就进入就绪状态(Runnable)。此时
的线程尚未真正开始执行线程体,它必须等待CPU的调度 -
运行状态
CPU的调度就绪状态的线程,线程进入运行状态(Running),处于运行状态的线程
独占CPU,执行完成线程体 -
阻塞状态
因为某种原因运行状态的线程会进入不可运行状态,即阻塞状态(Blocked),处
于阻塞状态的线程Java虚拟机系统不能执行该线程,即使CPU空闲,也不能执行该
线程。如下几个原因会导致线程进入阻塞状态:
- 当前线程调用sleep函数,进入休眠状态。
- 被其他线程调用了join函数,等待其他线程结束。
- 发出I/O请求,等待I/O操作完成期间。
- 当前线程调用wait函数。
- 死亡状态
线程执行完成线程体后,就会进入死亡状态(Dead),线程进入死亡状态有可能是
正常执行完成进入,也可能是由于发生异常而进入的
三、线程管理
1、join
当前线程调用 子线程的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-0
第1次执行 - Thread-0
第2次执行 - Thread-0
第3次执行 - Thread-0
第4次执行 - Thread-0
第5次执行 - Thread-0
第6次执行 - Thread-0
第7次执行 - Thread-0
第8次执行 - Thread-0
第9次执行 - Thread-0
执行完成! Thread-0
第0次执行 - zyb
第1次执行 - zyb
第2次执行 - zyb
第3次执行 - zyb
第4次执行 - zyb
第5次执行 - zyb
第6次执行 - zyb
第7次执行 - zyb
第8次执行 - zyb
第9次执行 - zyb
执行完成! zyb