线程
来自WordPress中文文档
目录 |
线程
概念
一般来说,我们把正在计算机中执行的程序叫做进程(Process) ,而不将其称为程序(Program)。所谓线程(Thread),是进程中某个单一顺序的控制流。
计算机操作系统,如Mac,Windowss系列等,大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。
作为单一顺序控制流,在运行的程序内线程必须拥有一些资源作为必要的开销。例如,必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起作用,因此某些地方用"执行上下文"来代替线程。
适用范围
典型的应用
- 服务器中的文件管理或通信控制
- 前后台处理
- 异步处理
执行特性
状态
一个线程必须处于如下四种可能的状态之一:
- 初始态:一个线程调用了new方法之后,并在调用start方法之前的所处状态。在初始态中,可以调用start和stop方法。
- Runnable:一旦线程调用了start 方法,线程就转到Runnable状态,注意:如果线程处于Runnable状态,它也有可能不在运行,这是因为还有优先级和调度问题。
- 阻塞/ NonRunnable:线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。 退出:线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法。
- 最后一个概念就是线程的优先级,线程可以设定优先级,高优先级的线程可以安排在低优先级线程之前完成。一个应用程序可以通过使用线程中的方法setPriority(int),来设置线程的优先级大小。
基本操作
- 派生:线程在进程内派生出来,它即可由进程派生,也可由线程派生
- 阻塞(Block):如果一个线程在执行过程中需要等待某个事件发生,则被阻塞
- 激活(unblock):如果阻塞线程的事件发生,则该线程被激活并进入就绪队列
- 调度(schedule):选择一个就绪线程进入执行状态
- 结束(Finish):如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放
文件:Jbcz.png
线程的另一个执行特性是同步。线程中所使用的同步控制机制与进程中所使用的同步控制机制相同。
分类
线程有两个基本类型: