第19章 线程
无论PC(个人计算机)还是智能手机现在都支持多任务,都能够编写并发访问程序。多线程编程可以编写并发访问程序。本章介绍多线程编程。
19.1 基础知识
那么线程究竟是什么?在Windows操作系统出现之前,PC上的操作系统都是单任务系统,只有在大型计算机上才具有多任务和分时设计。随着Windows、Linux等操作系统出现,把原本只在大型计算机才具有的优点,带到了PC系统中。
19.1.1 进程
一般可以在同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程的概念中,每一个进程的内部数据和状态都是完全独立的。在Windows操作系统下可以通过Ctrl+Alt+Del组合键查看进程,在UNIX和Linux操作系统下是通过ps命令查看进程的。打开Windows当前运行的进程,如图19-1所示。
在Windows操作系统中一个进程就是一个exe或者dll程序,它们相互独立,互相也可以通信,在Android操作系统中进程间的通信应用也是很多的。
19.1.2 线程
线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序控制的流程,但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源。所以系统在各个线程之间切换时,开销要比进程小的多,正因如此,线程被称为轻量级进程。一个进程中可以包含多个线程。
19.1.3 主线程
Kotlin程序至少会有一个线程,这就是主线程,程序启动后由Java虚拟机创建主线程,程序结束时由Java虚拟机停止主线程。主线程它负责管理子线程,即子线程的启动、挂起、停止等等操作。图19-2所示是进程、主线程和子线程的关系,其中主线程负责管理子线程,即子线程的启动、挂起、停止等操作。
获取主线程示例代码如下:
//代码文件:chapter19/src/com/a51work6/section1/ch19.1.3.kt
package com.a51work6.section1
import java.lang.Thread.currentThread
fun main(args: Array) {
//获取主线程
val mainThread =currentThread() ①
println(“主线程名:” + mainThread.name) ②
}
上述代码第①行是currentThread()函数获得当前线程,由于在main函数中当前线程就是主线程。currentThread()函数也可以表示成Thread.currentThread(),这样就不需要import
java.lang.Thread.currentThread语句了,Thread是Java提供的线程类。代码第②行的name属性获得线程的名字,主线程名是main,由Java虚拟机分配。
19.2 创建线程
在Java中线程类是Thread