线程
现代操作系统在运行一个程序的时候就会创建一个进程。线程是现在操作系统系统调度的最小单元,也称为轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,每个线程都有自己的程序计数器、堆栈和局部变量等属性,并且能够访问内存中共享的变量。
使用多线程的原因
- 更多的处理器核心:随着处理器上的核心数量越来越多,以及超线程技术的广泛应用,现在的计算机比以往更加擅长并行计算;
- 更快的响应时间:当业务逻辑过于复杂,使用多线程技术,将对数据一致性要求不高的操作派发给多个线程处理,这样做能更快地处理完一个复杂任务,缩短响应时间,提升用户体验;
- 更好的编程模型:Java为多线程提供了良好、考究并且一致的编程模型,使开发人员能够更加专注于问题的解决,即为所遇到的问题建立合适的模型,而不是绞尽脑汁地考虑如何将任务多线程化。
线程优先级
在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法修改线程的优先级,默认优先级为5,优先级高的线程分配时间片的数量要多于优先级低的线程。设置线程优先级时,针对频繁阻塞的线程则设置较低的优先级,保证处理器不会被独占。
线程状态
Java线程在运行的生命周期可能处于6种不同的状态,在任意给定时刻线程只能处于其中的一种状态:
| 状态名称 | 说明 |
|---|---|
| NEW | 初始状态,线程被构建,但是还没有调用start()方法 |
| RUNNABLE | 运行状态,Java线程将操作系统中的就绪和运行两种状态笼统地称为“运行中” |
| BLOCKED | 阻塞状态,表示线程阻塞于锁 |
| WAITING | 等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或中断) |
| TIME_WAITING | 超时等待状态,该状态不同于WAITING,它是可以在指定时间自行返回的 |
| TERMINATED | 终止状态,表示当前线程已经执行完毕 |
Daemon线程
Daemon线程是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作。这意味着,当一个Java虚拟机中不存在非Daemon线程时,Java虚拟机将会退出。可以在线程启动之前通过调用Thread.setDaemon(true)将线程设置为Daemon线程。