解析java中的多线程的基本概念
1 程序(program)
程序是为了完成某项实际功能,用某种语言编写的一种指令的集合.简单来说,我们平常敲的代码就是程序。程序是静态的一种状态。
2 进程(processor)
2.1 进程指的是运行中的程序。
2.2 进程是一种动态过程,占用系统的资源(CPU、内存、硬件)
2.3 进程若崩掉了,会让出资源(CPU、内存、硬件)给其他需要资源的进程使用
2.4 每个进程之前相互独立,但是两者之间可以通过特定的方法通信
举例:火车站可以看成一个程序,那么候车室和售票厅就相当于两个进程,因为他们俩分别负责不同的功能,两者之间是独立的,他们执行不同的功能时候互不影响.
2.5 进程举例说明: 打开电脑上面的qq,qq一旦运行它就是一个进程
3 线程(thread)
3.1 进程里面最小的执行单元,不可再分。
3.2 每个线程都有自己独立的栈空间
3.3 线程和线程之间是可以共享的,包含它们进程所对应的堆、方法区
3.4 某个线程崩掉了,此进程也可能会崩掉
3.5 线程可以并发执行
3.6 线程是由进程创建的,是进程的一个实体
3.6 一个进程可以拥有多个线程
例如: 启动了的百度网盘可以看出一个进程,然后它里面的多个下载任务可以看出一个个的线程,下载的速度谁快谁慢也是需要自己去争抢网速的(抢夺式下载)
4 并发
4.1 内容
同一个时刻,多个任务交替执行,给咱们造成一种貌似同时的错觉,实际上并不是同时执行了(只不过是cpu的执行速度够快而已)
单核cpu实现的多任务就是并发
4.2 举例说明
例如:你在打游戏的时候同时进行语音交流,看上去是同时发生的,实际上是不是,是你的大脑的运算速度足够快,然后能支撑着你边玩游戏边聊天。(打游戏用到的是手,聊天用到的是嘴巴)
5 并行
5.1 内容
同一个时刻,多个任务同时执行
5.2 举例说明
例如: 你的电脑同时启动了qq和百度网盘,在下载资源的同时,还可以和好友进行聊天
这两个操作是同一个时刻执行的,就是并行操作
6 补充
6.1 如何查看电脑里面有几个cpu
6.1.1 程序方法
a 示例代码
package Work4;
public class CPUTest {
public static void main(String[] args) {
Runtime runtime=Runtime.getRuntime();
//获取当前电脑的cpu数量
int cpuNum=runtime.availableProcessors();
System.out.println("当前电脑的cpu数量为: "+cpuNum);
}
}
b 示例代码运行截图
6.1.2 任务管理器法
a 在搜索处搜索任务管理器并回车
b 点击性能
c 点击打开资源管理器按钮
d 点击上方的cpu菜单栏
e 得到最终的cpu数量为8(从0开始命名的)
6.1.3 我的电脑法
a 我的电脑右键管理
b 点击设备管理器
c 点击处理器
d 查看cpu个数的结果