写点什么

认识线程

作者:zarmnosaj
  • 2022 年 7 月 01 日
  • 本文字数:845 字

    阅读完需:约 3 分钟

认识线程

线程是什么?


线程是程序执行的最小单元,依托于进程存在。


一个进程中可以包含多个线程,多线程也可以共享同一块内存空间和系统资源,因此线程之间的切换相比于进程之间的切换更加节省资源、更加轻量化。

线程的状态

  1. NEW,新建状态:线程被创建出来,但尚未启动时的线程状态

  2. RUNNABLE,就绪状态:表示线程可以运行的状态,它可能正在运行,或者是在排队等待操作系统分配 CPU 资源;

  3. BLOCKED,阻塞等待锁的线程状态:表示处于阻塞状态的线程,正在等待锁释放,比如等待执行 synchronized 代码块或者使用 synchronized 标记的方法,但此时已经被其他线程执行,所以处于阻塞等待。

  4. WAITING,等待状态:一个线程正在等待另一个线程执行某个特定的动作,这个线程就处于等待状态。比如一个线程调用了 Object.wait() ,那它在等待另一个线程调用 Object.notify() 或 Object.notifyAll() 方法时所处的状态,称之为等待状态。

  5. TIMED_WAITING,超时等待状态:当进行等待状态时,会设置一个超时时间,当等待时长超过规定的时间后,线程所处的状态就称为超时等待状态。比如 Object.wait(long timeout) 和 Thread.join(long timeout) 等方法,就会让线程有可能进入此状态。

  6. TERMINATED,终止状态:表示线程已经执行完成。


线程状态的枚举源代码:


public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED}
复制代码

线程的工作模式

  1. 首先创建线程,此时线程处于 NEW 状态。

  2. 指定线程需要执行的业务方法,此时线程处于 RUNNABLE 状态

  3. 线程执行过程中,如果遇到有同步代码块,并且其他线程先一步执行,则当前线程则会进入 BLOCKED 状态。待其他线程执行完成同步代码块之后,当前线程会继续等待。

  4. 如果线程中代码有调用 Object.wait()方法或者 Thread.join()方法时,线程会进入 WAITING 状态,并且当有设置超时时间时,则线程会进入 TIMED_WAITING 等待状态。直到有其他线程执行了 notify() 或 notifyAll() 方法,当前线程才会被唤醒,继续执行代码。

  5. 最后线程方法执行完成,线程也就变成了 TERMINATED 状态。

发布于: 刚刚阅读数: 3
用户头像

zarmnosaj

关注

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

成都后端混子

评论

发布
暂无评论
认识线程_7月月更_zarmnosaj_InfoQ写作社区