文章目录
一、程序和进程
1.程序的进化论
.java文件经过编译生成.class文件被加载到JVM,打包成jar包,再转换成windows可以执行的.exe文件。
exe:windows操作系统的可执行文件
jar:java开发,需要通过java虚拟机来运行
2.程序和进程的关系
程序:静态的指令和数据集合
进程:运行状态的程序,数据和指令会加载到内存中
程序启动后指令和数据被加载到内存中。
3.进程和线程的关系
线程:程序执行的最小单元(目前是,也许会出现比线程更小的执行单元)
进程:线程的集合
4.CPU和RAM的关联
cpu和内存之间是通过北桥芯片连接,进行数据交互
5.CPU、进程、线程之间的关系
一个cpu在同一时刻只能执行一个线程
cpu切换不同的线程执行的耗时叫做时间片
6.CPU如何执行
PC 程序计数器:存储了下一条指令的地址
ALU 逻辑运算单元
寄存器:从内存读取的指令和数据都存在这里
二、线程
1.线程的使用
①实现Runnable接口,重写run()方法
public class ThreadDemo implements Runnable {
@Override
public void run() {
//用户自定义
int i = 0;
i = i+1;
System.out.println("i="+i);
}
public static void main(String[] args) {
//start()方法会创建一个新的线程去调用run()方法,而threadDemo.run()由主线程来执行
ThreadDemo threadDemo = new ThreadDemo();
Thread thread = new Thread(threadDemo);
thread.start();
}
}
②继承Thread类
public class ThreadDemo extends Thread {
public static void main(String[] args) {
Thread thread = new ThreadDemo();
thread.start();
}
2.线程的生命周期
①NEW 初始状态:实例化一个线程时,就是该线程的生命起点 ;
②RUNNABLE 运行时:就绪态和运行中统称为运行时状态;
③WAITING 等待状态:调用方法,释放时间片和锁,需要人工唤醒;
④TIME_WAITING 等待状态:相当于指定了等待的时长,不会释放锁,到点儿自动唤醒,从上一次执行的地方继续执行。
⑤BLOCKED 阻塞状态:A线程要执行Sychronized包裹的代码,但是当前已有线程占用,所以等当前线程执行完毕释放锁,A就会被唤醒去竞争锁来获得Sychronized包裹的代码的执行权。
举个例子:你要去上厕所,但是厕所已经有人在用了。你只有等这个人出来,才能使用厕所
⑥TERMINATED 终止状态:run()方法执行完毕,线程生命结束,被GC回收。
三、并发和并行
1.并发和并行
并行:同时进行,如CPU1和CPU2属于并行状态,能同时并行2个任务
并发:同一时刻内,能处理的任务数。如上图,t1时间内,能处理的最大任务数是6(thread1-thread6)
多线程:为了提升性能和资源利用率
举例:运动会接力棒比赛,4个队伍参加,比赛时长30分钟。
4个队伍同时进行,就是并行。
30分钟内传递的了多少人,这个就是并发量。
2.高并发的定义以及实现条件
高并发::当前系统能够同时承载的并发数
参考
高并发的条件:
①.硬件资源:
- cpu,核心数,并行任务数量
- 内存
- 磁盘
- 网卡
②软件
- 线程:同时运行的线程数量
- IO:数据库交互
- 分布式,解决单节点瓶颈
3.多线程带来的问题
三大特性:原子性、可见性、有序性。