线程相关的概念
在了解线程
之前首先要知道什么是进程
,打开我们的任务管理器,上面这些正在运行的程序
就是一个个的进程。
进程和线程
提示:该部分仅为个人理解观念,如有错误欢迎指正:
程序
:主要指的是没有跑起来的一堆代码,更注重与静止的,没运行的
进程
:主要是值运行后的程序,是操作系统分配系统资源(内存空间、CPU)的最小单位
线程
:每个进程由一个或多个线程组成,线程是CPU进行分配和调度的最小单位(分配时间片)
进程与线程的区别
- 内存方面:
进程
需要的资源更多(堆、方法区、本地方法区)
,线程
更轻量级(栈、程序计数器)
线程
共享所在进程
的内存空间(堆、方法区、本地方法区)
-
创建和销毁以及上下文切换:
进程需要更多时间和资源,线程更快
-
相互通信方面:
进程之间的通信比较麻烦(RPC、网络),线程之间通信更容易(通过进程共享的内存空间)
为什么要使用多线程
线程是程序指令的单独的执行路径,多线程同时执行,大大提高了程序的执行效率
举一个简单的例子:
现在有10个箱子,需要将这些箱子从A搬到B,此时只有一个人(这里的人就好比程序中的线程),假设人每次只能搬一个箱子,每次搬箱子需要花掉10秒,这个时候完成整个工作就需要100秒。但要是有10个人,大家一起搬,那就只需要10秒就能搬完了。
这个时候就要提一下并行和并发,还有同步与异步了
并行和并发
上面提到过,线程是CPU进行分配和调度的最小单位。一个CPU内核一个时间段只能运行一个线程的指令,但是因为CPU执行的速度特别快所以感觉多个程序同时运行
并发
:一个CPU在多个线程间来回切换执行,不是真正同时执行
并行
:多个CPU同时执行多个线程,是真正同时执行
同步和异步
程序指令执行过程分为:
同步
:多个程序指令排队执行(执行有序,数据更加安全)
异步
:多个程序指令同时执行(效率更高,执行无序,数据可能会有问题)
总结
以上为个人理解的一些有关线程基础的理论部分,关于线程的创建以及它的生命周期我放到后面啦!下一篇文章里会放上关于操作的代码,也欢迎互相交流!
有关线程的创建以及生命周期: Java线程基础(二)—— 线程创建.