线程,被称为轻量级进程,是程序执行流的最小单元。
一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。
另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
由于线程之间的相互制约,致使线程在运行中呈现出间断性。
线程也有就绪、阻塞和运行三种基本状态。
就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件,逻辑上不可执行。
每一个程序都至少有一个线程,若程序只有一个线程,是程序本身。
一、线程的基本状态为以下五种:
1.新建状态,当线程对象对创建后,即进入了新建状态;
2.就绪状态,当调用线程对象的方法,线程即进入就绪状态;
3.运行状态,当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态;
4.阻塞状态,处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态才有机会再次被CPU调用以进入到运行状态;
5.死亡状态,线程执行完了或者因异常退出,即该线程结束生命周期;二、线程状态之间的关系:调用线程的start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。
在就绪队列中选择最高优先级线程,使之投入运行;将低于最高优先级的正在运行的线程挂起;根据优先级值和VM的当前状态计算并分配给每个线程时间片的份数;每隔二十毫秒计算线程的优先级并作出评价。
计算机通常只有一个CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令。
所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务。
在运行池中,会有多个处于就绪状态的线程在等待CPU,JAVA虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权。