2022-08-02 第十组 石晓荟
多线程
重点
- 线程
线程(thread)是一个程序内部的一条执行路径
知识点
1.继承Thread类,并且重写run方法
定义一个子类MyThread继承线程类java.lang.Thread,重写run()方法
创建MyThread类的对象
调用线程对象的start()方法启动线程(启动后还是执行run方法的)
优点:编码简单
缺点:线程类已经继承Thread,无法继承其他类,不利于扩展。
2.实现Runnable接口
定义一个线程任务类MyRunnable实现Runnable接口,重写run()方法
创建MyRunnable任务对象
把MyRunnable任务对象交给Thread处理。
调用线程对象的start()方法启动线程
优点:线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强。
缺点:编程多一层对象包装,如果线程有执行结果是不可以直接返回的。
匿名内部类形式:
可以创建Runnable的匿名内部类对象。
交给Thread处理。
调用线程对象的start()启动线程。
3. 利用Callable、FutureTask接口实现。
、得到任务对象
定义类实现Callable接口,重写call方法,封装要做的事情。
用FutureTask把Callable对象封装成线程任务对象。
、把线程任务对象交给Thread处理。
、调用Thread的start方法启动线程,执行任务
、线程执行完毕后、通过FutureTask的get方法去获取任务执行的结果。
优点:线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强。
可以在线程执行完毕后去获取线程执行的结果。
缺点:编码复杂一点
4.守护线程
Java中提供两种类型的线程:
1.用户线程
2.守护程序线程
守护线程为用户线程提供服务,仅在用户线程运行时才需要。
守护线程对于后台支持任务非常有用。
垃圾回收。大多数JVM线程都是守护线程。
QQ,主程序就是用户线程。
创建守护线程
任何线程继承创建它的线程守护进程状态。由于主线程是用户线程,
因此在main方法内启动的任何线程默认都是守护线程。
5.线程的生命周期
NEW:这个状态主要是线程未被start()调用执行
RUNNABLE:线程正在JVM中被执行,等待来自操作系统的调度
BLOCKED:阻塞。因为某些原因不能立即执行需要挂起等待。
WAITING:无限期等待。Object类。如果没有唤醒,则一直等待。
TIMED_WAITING:有限期等待,线程等待一个指定的时间
TERMINATED:终止线程的状态,线程已经执行完毕。
等待和阻塞两个概念有点像,阻塞因为外部原因,需要等待,
而等待一般是主动调用方法,发起主动的等待。等待还可以传入参数确定等待时间。
掌握程度
定义性的东西略多,刚接触线程有点不太明白
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)