线程与进程
进程
- 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间
线程
- 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行。一个进程最少有一个线程
- 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成多个线程
线程调度
分时调度
- 所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间
抢占式调度
- 优先让优先级高的线程使用cpu。如果线程的优先级相同,那么会随机选择一个(线程随机性), Java使用的就是抢占式调度
- CPU使用抢占式调度模式在多个线程间进行着高速的切换,对于CPU的一个核心而言,某个时刻,只能执行一个线程,而CPU在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。其实多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。
同步与异步
同步: 排队执行,效率低但是安全
异步: 同时执行,效率高但是数据不安全
并发与并行
并发: 指两个或多个事件在同一时间段内发生
并行: 指两个或多个事件在同一时刻发生(同时发生)
线程的六种状态
- NEW 尚未启动的线程处于此状态
- RUNNABLE 在Java虚拟机中执行的线程处于此状态
- BLOCKED 被阻塞等待监视器锁定的线程处于此状态
- WAITING 无限期等待,除非有人唤醒
- TIMED_WAITING 指定时间的等待,到达指定的时间后就会被自动唤醒。
当然也能提前被唤醒。 - TERMINATED(terminated)结束, 线程已结束
线程死锁
死锁: 当A占用了资源1 ,B占用了资源2 ,此时A需要资源2,B需要资源1;但是这两个资源都没有被释放,所以A一直占用资源1,B一直占用资源2,发生了死锁、