线程
肖文英
1 什么是线程
在计算机科学领域,线程是指在一个进程内部执行的独立单元。一个进程可以包含多个线程,每个线程都有自己的执行路径,可以独立运行。线程是操作系统进行任务调度单位,它允许我们实现并发执行,使得程序能够更高效地利用计算机资源。
Java 是一门强大的编程语言,其中最引人注目的特性之一是多线程支持。多线程允许我们在同一程序中同时执行多个任务,这大大提高了应用程序的性能和响应能力。本文将深入介绍 Java 线程的基础知识,无论您是初学者还是有一定经验的开发人员,都将从中获益。
2 创建与启动线程
2.1 两种常见方式
在 Java 中,有两种常见的方式来创建和启动线程:
继承 Thread 类: 您可以创建一个继承自 Thread 类的子类,并重写 run() 方法来定义线程的执行逻辑,然后创建线程对象并调用 start() 方法来启动线程。
实现 Runnable 接口: 您可以创建一个实现 Runnable 接口的类,并重写 run() 方法来定义线程的执行逻辑,然后创建线程对象,并将 Runnable 对象传递给线程的构造函数,并调用 start() 方法来启动线程。
需要注意的是我们在构造 Thread 对象后不需要调用 run 方法,Thread 对象在获取 CPU 时间片后会自动运行 run 方法。
下面是两种方式的示例代码:
2.2 Future 方式
除了上述两种方式,还可以使用 Future 来创建线程,这是一种更高级的方法,允许线程执行完毕后获取结果。
3 线程的生命周期
3.1 Java 线程的生命周期
了解线程的生命周期对于编写多线程程序非常重要,因为我们需要根据线程的状态来进行合适的操作和控制。
一个 Java 线程可以处于以下几种状态:
新建状态(New): 当线程对象被创建但尚未启动时线程处于此状态。
可运行状态(Runnable): 在 Java 虚拟机中执行的线程处于此状态。
阻塞状态(Blocked): 等待监视器锁的线程处于此状态。
等待状态(Waiting): 无限期等待另一个线程执行特定动作的线程处于此状态。
定时等待状态(Timed Waiting): 等待另一个线程执行动作,最多等待指定时间的线程处于此状态。
终止状态(Terminated): 已退出的线程处于此状态。
3.2 线程的状态转换
一个线程在其生命周期内会经历不同的状态,这些状态之间可以相互转换。以下是线程的状态转换图:

理解这些状态的转换非常重要,因为我们需要根据线程的当前状态来决定如何操作线程,以实现我们想要的并发行为。
3.3 和操作系统线程状态对应关系

可运行状态(Runnable):处于此状态下的线程正在 Java 虚拟机中执行,但它可能正在等待来自于操作系统的其它资源没有运行,比如处理器或 IO,也可能获取了 CPU 时间片处于运行中。
阻塞状态(Blocked):一个处于 blocked 状态的线程正在等待一个监视器锁 (注和 Lock 接口锁不一样) 以进入一个同步块或方法。

注意我们重点介绍另一种情况,InputStream 的 read 调用,该操作是不可中断的,如果流中没有数据,read 方法会阻塞 (但线程状态依然是 JVM 的 RUNNABLE 状态),且不响应 interrupt(),与 synchronized 类似,调用 interrupt() 只会设置线程的中断标志,而不会真正"中断"它。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 线程池源码解读与实践》
《Java 线程池源码解读与实践》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论