现代操作系统中,运行一个程序时,会创建一个进程。现代操作系统的最小调度单元是线程,在一个进程中创建多个线程。
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 类的方法。
串行和并行
在多线程中,经常会提到这两个概念,串行和并行。
串行
串行指的是由单个线程来完成多个线程任务。
并行
并行:下载多个文件,开启多条线程,多个文件同时进行下载,这里是严格意义上的在同一时刻发生的,并行在时间上是重叠的。