【Java】多线程简介
进程介绍
不管是我们开发的应用程序,还是我们运行的其他的应用程序,都需要先把程序安装在本地的硬盘上。然后找到这个程序的启动文件,启动程序的时候,其实是电脑把当前的这个程序加载到内存中,在内存中需要给当前的程序分配一段独立的运行空间。这片空间就专门负责当前这个程序的运行。不同的应用程序运行的过程中都需要在内存中分配自己独立的运行空间,彼此之间不会相互的影响。
我们把每个独立应用程序在内存的独立空间
称为当前应用程序运行的一个进程。它是内存中的一段独立的空间,可以负责当前应用程序的运行。当前这个进程负责调度当前程序中的所有运行细节。
对于Java程序来说,JVM会为其分配一个独立的运行空间。JVM即为Java程序的进程。
线程介绍
启动的QQ聊天软件,需要和多个人进行聊天。这时多个人之间是不能相互影响,但是它们都位于当前QQ这个软件运行时所分配的内存的独立空间中。
在一个进程中,每个独立的功能都需要独立的去运行,这时又需要把当前这个进程划分成多个运行区域,每个独立的小区域(小单元)称为一个线程。
线程是位于进程中,负责当前进程中的某个具备独立运行资格的空间。
进程是负责整个程序的运行,而线程是程序中具体的某个独立功能的运行。
一个进程中至少应该有一个线程。
对于Java程序来说,线程有自己独立的运行空间,比如栈空间
,存储一些局部变量和操作数等。同时也共享一些进程空间的资源。
进程和线程的关系
网上有一副很经典的图可以让我们来理解进程和线程的关系:
下面这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。
- 这些线程(车道)共享了进程(道路)的公共资源(土地资源)。
- 这些线程(车道)必须依赖于进程(道路),也就是说,
线程不能脱离于进程而存在
(就像离开了道路,车道也就没有意义了)。 - 这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。
- 这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。
- 这些线程(车道)都运行同一份代码逻辑(车辆)。
- 这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到CPU时间片(交通灯变化)的那一刻才能知道。
多线程介绍
现在的操作系统基本都是多用户,多任务的操作系统。每个任务就是一个进程。而在这个进程中就会有线程。
真正可以完成程序运行和功能的实现靠的是进程中的线程。
多线程是在一个进程中,我们同时开启多个线程,让多个线程同时去完成某些任务(功能)。(比如后台服务系统,就可以用多个线程同时响应多个客户的请求)
多线程的目的是提高程序的运行效率。
多线程运行的原理
其实真正电脑中的程序的运行不是同时在运行的。CPU负责程序的运行,而CPU在运行程序的过程中某个时刻点上,它其实只能运行一个程序。而不是多个程序。而CPU它可以在多个程序之间进行高速的切换。而切换频率和速度太快,导致人的肉眼看不到。
每个程序就是进程, 而每个进程中会有多个线程,而CPU是在这些线程之间进行切换。
了解了CPU对一个任务的执行过程,我们就必须知道,多线程可以提高程序的运行效率,但不能无限制的开线程
。
评论区