线程基础概念

java语言的优势之一就是多线程处理较为简单。

程序

指令+数据的byte序列,如:qq.exe

进程

对于操作系统而言,同时运行的每一个任务就是一个应用程序。对于操作系统级别同时运行的任务,成为进程。比如:qq.exe,eclipse,IE等。正在运行的程序,是程序动态的执行

线程

对于一个进程而言(程序):在程序内部也会同时运行多个任务,那个每一个任务称为一个线程。

并发

线程的运行是并发执行的。所谓并发:宏观上所有的线程都是同时运行,但微观上看所有线程都是走走停停的

同步和异步

执行有先后顺序的是同步运行。执行没有先后顺序的是异步执行(并发执行),即你执行你的,我执行我的

线程调度

在运行池中,会有多个处于就绪状态的线程在等待CPU,JAVA虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权.有两种调度模型:分时调度模型和抢占式调度模型。

1. 分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。

2. java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。

java的线程调度是不分时的,同时启动多个线程后,不能保证各个线程轮流获得均等的CPU时间片。

时间片

时间片即CPU分配给各个程序的时间,每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

原文地址:https://www.cnblogs.com/qin-derella/p/6588252.html