1. 进程和线程
进程:当一个程序进入内存中运行,就是一个进程。所以每个进程都有单独的分配内存。典型的特征就是进程的pid,可以通过kill命令杀死进程。比如运行的每个软件就是每个进程。
线程:进程的一个执行单位,也是CPU调度的基本单位。一个进程会有多条线程,线程共享进程的所有上下文环境,在多进程时,CPU会不断的切换线程来执行(同一时间cpu只会执行一个线程,但cpu的速度很快,给人同时执行的错觉)。比如QQ同时和多人聊天。
从CPU角度讲,进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文,线程共享进程的上下文环境,为更细粒度的CPU时间段
2. 多线程
指一个进程(比如jvm中运行的一个jar包),产生了不止一个线程。多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)。
3. 线程的状态
new:线程的创建(未启动)
runnable:等待执行(未获取cpu使用权)或正在执行中的线程(获取cpu使用权)。等待状态的线程在获取CPU时间片段后变为执行中。
blocked:锁定线程。表示此线程正在被使用,其他线程无法访问
waiting:等待该线程需要等待其他线程通知/中断后才能释放
timed_waiting:超时等待。可以在指定的时间返回。
terminated:终止。表示线程调度完毕。
4. java线程的创建
查看我的下一篇文章:《java线程的创建(重点:线程池的使用,线程池不允许使用Executors创建)》
5. 锁
扩展:
ThreadLocal 适用于变量在线程间隔离且在方法间共享的场景