1.0、Java多线程——线程、进程、多线程的概念
进程是什么?线程又是什么?
在操作系统中运行的程序就是进程,比如你的QQ、播放器、游戏、IDEA等等。一个进程可以有多个线程,比如视频中同时听声音、看图像、看弹幕、等等。
说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态得概念
而进程则是执行程序一次执行的过程,他是一个动态的概念,进程是系统资源分配的单位
通常在一个进程总可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程是CPU调度和执行的单位。
注意:
很多 多线程 是模拟出来的,真正的多线程是指有多个cpu,即多核,如服务器。如果是模拟出来的多线程,即在一个cpu的情况下,在同一时间点,cpu只能执行一个代码,因为切换的很快,所以就有同时执行的错觉。
什么模拟多线程呢?举个例子:
就比如说我们在边看书的同时听音乐,这两件事情看上去我们的确是是同时进行的,但是我们大脑的一瞬间要么在看书要么在听音乐,只是这两者切换的很快很快,我们无法察觉。
那么计算机模拟多线程也是一样,他只是在多个线程中不断的来回切换时间间隔单位为纳秒,由于间隔十分短暂导致我们无法察觉就和同时进行一样了。
下面我们来看一下普通方法调用和多线程调用的区别:
在普通调用中我们调用方法时要等待方法调用完毕返回才能够继续往下执行,而多线程调用可以同时执行不需要等待。
本章的核心概念:
1、线程就是独立的执行路径;
2、在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程;
3、main()称之为主线程,为系统的入口,用于执行整个程序;
4、在一个进程中,如果开辟了多个线程,线程的运行有调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的;
5、对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制;
6、线程会带来额外的开销,如cpu调度时间,并发控制开销;
7、每个线程在自己的工作内存交互,内存控制不当会造成数据不一致;