304/305线程的概念和调度
线程的概念
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。
一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
线程的调度
分时调度
所有线程轮流使用CPU 的使用权,平均分配每个线程占用CPU 的时间。
抢占式调度
优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。
Java采用抢占式调度的方式实现内部的线程调度,Java会为每个线程都按照优先级高低分配不同的CPU时间片,且优先级高的线程优先执行。
优先级低的线程只是获取CPU时间片的优先级被降低,但不会永久分配不到CPU时间片。Java的线程调度在保障效率的前提下尽可能保障线程调度的公平性。
线程让出 CPU 的情况
当前运行的线程主动放弃CPU,例如运行中的线程调用yield()放弃CPU的使用权。
当前运行的线程进入阻塞状态,例如调用文件读取I/O操作、锁等待、Socket等待。
当前线程运行结束,即运行完run()里面的任务。