java多线程概念
java多线程一 –概念
Java线程和进程
java中多线程是同时执行多个线程的过程,线程是一个轻量级的子进程,也是最小的处理单元。在有处理多任务的需求时,会用到多进程和多线程,以此来尽可能利用CPU,提高运行效率。一个系统下可以存在多个进程,一个进程中又存在多个线程。线程使用共享内存区域,它们不分配单独的内存区域以节省内存,而且线程之间上下文切换比进程花费的时间更少,所以在多任务处理中,我们更多使用多线程。
多进程
- 重量级
- 通信成本较高
- 每一个进程在内存中有一个地址,虚拟机为其分配一个单独的内存区域
- 切换进程需要一定时间,用于保存和加载寄存器和内存映射
多线程
- 轻量级
- 线程是最小的处理单位,属于子进程
- 通信成本比较低
- 线程之间共享相同的地址空间
多线程的使用优点
- 由于线程是独立的,它不会阻塞用户,一个线程不会影响另一个线程的运作,并且可以对线程设置延时执行的操作。
- 线程的死亡,不会影响其它线程
- 线程可以同时执行多个,可以提高CPU的利用率。
进程和线程的具体区别
每一个进程都在内存中独享一块空间,一般来说,启动一个应用程序就是启动一个进程,一个进程中包含了多个线程,线程就是进程中的一个执行流程。一个进程中的多个线程是共享进程所占有的独立空间的,也就是说同一进程里的所有线程共享同一份资源。比如,我们使用谷歌浏览器网上冲浪,那么谷歌浏览器就是所谓的进程,我们打开一个网页的过程就其中的一个线程。
在java中,每次当我们启动java程序时,操作系统都会启动java虚拟机进程,给这个进程分配一定内存资源,启动虚拟机后虚拟机进程会创建一个主线程,该线程会从程序入口main方法开始执行。
进程和线程的主要区别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程死亡后,在保护模式下不会对其他进程产生影响。线程只是一个进程中的一次执行流程,有自己的堆栈和局部变量,但是线程没有自己的独立的地址空间。如果说进程相当于一个机器人的话,那么,线程就相当于机器人的零件,当一个线程死亡时会导致整个进程死亡,因此,进程在切换时,消耗资源较大,效率低。所以,对于一些要求同时进行并且共享某些变量的并发操作,只能用多线程,而不用多进程。
此文用途只是自己学习总结和记录
参考博文:https://www.cnblogs.com/hqinglau/p/10053100.html
https://www.cnblogs.com/yuanmath/p/13278675.html