线程与进程
一个运行中的软件可能包含多个进程
一个运行中的进程可能包含多个线程
进程:所有线程执行完成即结束
线程:执行完逻辑就结束
- UI线程不会结束:
无限循环刷新界面,没有异常就不会结束
- 线程与进程的关系:
线程强依赖于进程,线程间不存在相互依赖的关系,一个线程结束不会对其他线程造成什么影响。
- 主线程与其他线程的区别:
主线程是由Java虚拟机启动时创建的。main方法执行时,主线程已经创建好并运行,因此无法设置为守护进程。除此之外,与其他线程无区别。
- 主线程结束,子线程未结束
两者没有关系,按照操作系统的理论,进程是资源分配的基本单位,线程是CPU调度的基本单位。对于CPU来说,两种线程都只是个普通的线程。进程的资源是线程共享的,只要进程还在,线程就可以正常执行,换句话说线程是强依赖于进程的。(Java虚拟机结束:所有存活的线程都是守护线程。只要还有非守护线程,虚拟机就不会结束。所以把子线程设置为守护线程
时,主线程结束,虚拟机就会结束,最后子线程就会结束了。)
fun main() {
thread(isDaemon = false) {
for (i in 0..1_000_000) println(i)
}
println("done")
}
输出:
done
1
2
3
...
- Thread, Runnable, ThreadFactory, Executor
Thread:执行一个简单的线程任务
Runnable:可被多个Thread复用
ThreadFactory:主要用于标记线程名字,方便调试(阿里Java编码规范)

Executor:
常用: newCachedThreadPool()
val executors = Executors.newCachedThreadPool()
executors.execute(...)
批量处理: newFixedThreadPool()
val executors = Executors.newCachedThreadPool()
executors.execute(...)
# 不会马上结束,只是不再接受新的任务,注意与shutdownNow的区别
executors.shutdown()
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!