写点什么

Thread 源码分析

作者:zarmnosaj
  • 2022 年 6 月 14 日
  • 本文字数:718 字

    阅读完需:约 2 分钟

Thread 的特点

  1. 每个 Thread 都有线程优先级,一般高优先级的线程可能会优先执行

  2. 父线程创建子线程后,子线程的优先级、守护线程属性和父线程是一致的

  3. 退出方法被调用,线程会停止

  4. 所有非守护线程都消亡,或者从运行的方法正常返回,或者运行的方法抛出了异常,线程会停止

  5. 线程都有名字,多个线程可能具有相同的名字,Thread 有的构造器如果没有指定名字,会自动生成一个名字。

线程的状态

  1. NEW:表示线程创建成功,但没有处于运行中,在 new Thread 之后,没有 start 之前,线程的状态都是 NEW

  2. 当运行 strat 方法,线程被创建成功之后,线程的状态变成 RUNNABLE,RUNNABLE 表示线程正在运行中;

  3. 子线程如果运行完成、或被打断、或被中止,状态都会从 RUNNABLE 变成 TERMINATED,TERMINATED 表示线程运行结束;

  4. 如果线程在等待获得 monitor lock 锁,会从 RUNNABLE 变成 BLOCKED,BLOCKED 表示阻塞;

  5. WAITING 和 TIMED_WAITING 类似,都表示在遇到 Object.wait()、Thread.join() 等方法时,线程就会等待另一个线程执行完特定的动作之后,才能结束等待。

线程初始化的方式

  1. 继承 Thread

  2. 实现 Runnable 接口

  3. 实现 Callable 接口+FutureTask(可以拿到返回结果,可以处理异常)

  4. 线程池创建线程


Java 中,类只能支持单继承,当定义一个新的类的时候,如果这个类是自定义的线程类,那继承了 Thread 就不能再继承其他的类了。如果自定义类必须扩展其他的类,就可以使用实现 Runnable 接口的方法来定义该类为线程类。

线程常用方法:

  1. join():当前线程(调用此方法的线程)等待另一个线程执行完成之后,才能继续操作

  2. yield():当前线程(调用此方法的线程)放弃当前 cpu 的使用权,让 cpu 重新选择线程,线程重新竞争 cpu 资源的使用

  3. sleep():指定当前线程会睡眠多长时间,但睡眠时不会释放锁

用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
Thread 源码分析_6月月更_zarmnosaj_InfoQ写作社区