一 概述
是指从软件或者硬件上实现 多个线程 并发执行的技术
具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。
当数据量非常庞大的时候,为了提高效率,采用多线程,如高速收费站有多个,12306买票
二 并行和并发
并行:在同一时刻,有多个指令(程序)在多个CPU上同时执行
并发:在同一时刻,有多个指令(程序)在单个CPU上交替执行
高并发(让程序能够实现高并发)
三 进程和线程
1 进程:
是正在运行的程序
是系统进行资源分配和调用的独立单位
每一个进程都有它自己的内存空间和系统资源
2 线程:
是进程中的单个顺序控制流,是一条执行路径,是进程中执行运算的最小单元
关系:
单线程:一个进程如果只有一个线程则称为单线程程序
多线程:一个进程如果有多个线程则称为多线程程序
Java程序中,main方法就是主线程,一个程序只有一个主线程
四 线程的状态与生命周期
线程的一个完整的生命周期中,可能经历五种状态,且线程因不同条件会在不同状态之间转换。
1.New 新建状态
new Thread()建立一个线程对象后,该线程对象就处于新建状态。
处于新建状态的线程对象,只能够被启动或终止。
2.Runnable 就绪状态
当线程对象调用start()方法之后,该线程就进入就绪状态,
并进入就绪队列排队等待CPU资源,即等待JVM里线程调度器的调度
3. Running 运行状态
如果就绪状态的线程获取CPU资源时(CPU开始调度处于就绪状态的线程时),就可以执行run()方法,此时线程处于运行状态。
run()方法定义了该线程的操作和功能(任务)
4.Blocked 阻塞状态
(1)阻塞状态不是最终状态
阻塞状态是线程因为某种原因让出CPU使用权,暂时停止运行。
在引起阻塞的原因没有取消前,即使CPU空闲,该线程也不会被执行。
当引起阻塞的原因被取消,线程重新转入就绪状态,再次等待cpu资源。
(2)阻塞的情况分三种:
- 等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。
(wait会释放持有的锁)直到由其他线程执行notify()和notifyAll()方法通知它,该线程才能重写进入就绪队列 - 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
- 其他阻塞:运行的线程执行sleep()或join()方法,或者发出I/O请求时,JVM会把该线程置为阻塞状态。
当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
(注意)sleep是不会释放持有的锁
5.dead 死忙状态
线程会以如下3种方式之一结束,结束后就处于死亡状态:
①run()方法执行完成,线程正常结束
②线程抛出一个未捕获的Exception或Error。
③直接调用该线程stop()方法来结束该线程——该方法容易导致死锁,通常不推荐使用
标签:状态,就绪,执行,概念,线程,多线程,CPU From: https://www.cnblogs.com/Sco-/p/16990065.html