Java 线程 Thread

 2023-01-31
原文作者:蒋先森 原文地址:https://jlj98.top/

现代操作系统中,运行一个程序时,会创建一个进程。现代操作系统的最小调度单元是线程,在一个进程中创建多个线程。

Java 线程状态

  • NEW:初始状态,线程构建但没有调用 start 方法
  • RUNNABLE:运行状态,Java操作系统中的就绪和运行状态的统称
  • BLOCKED:阻塞状态,表示线程阻塞于
  • WAITING:等待状态,表示线程进入等待,进入等待状态表示当前线程需要其他线程做出一些特定动作(通知或中断)
  • TIME_WAITING:超时等待状态,该主题不同于 WAITING,它是可以在指定时间内自动返回
  • TERMINATED:终止状态,表示该线程执行完毕

启动

启动使用 start() 方法,含义:当前线程同步告知Java虚拟机,只要线程规划器空闲,应立即启动调用 start() 方法的线程。

Thread.join() 的使用

如果线程A执行了thread.join()语句,其含义是:当前线程A等待thread线程执行终止之后,才从thread.join()返回。线程Thread 还提供 join(long millis) 和 join(long millis, int nanos) 两个具备超时特性的方法。这两个方法表示,如果线程thread在给定的超时时间内没有终止,那么将会从超时方法中返回。

start 和 run

start()只是让线程处于就绪状态。告诉CPU我已经准备好了,可以调用我了。而run()则是直接按顺序执行。

wait() 和 sleep()

wait()、notify()、notifyAll() 是 Object 类的方法;sleep() 和 yield() 是 Thread 类的方法。

串行和并行

在多线程中,经常会提到这两个概念,串行和并行。

串行

串行指的是由单个线程来完成多个线程任务。

并行

并行:下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的在同一时刻发生的,并行在时间上是重叠的。