2022-08-02 第十组 石晓荟

多线程

重点

  1. 线程
    线程(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:终止线程的状态,线程已经执行完毕。
  等待和阻塞两个概念有点像,阻塞因为外部原因,需要等待,
  而等待一般是主动调用方法,发起主动的等待。等待还可以传入参数确定等待时间。

掌握程度

定义性的东西略多,刚接触线程有点不太明白

posted @   Romantic_SXH  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示