线程(thread)
多线程:是任何一门语言的重要特性,在Java语言中更是有很重要的地位,大量应用于网络编程、服务器端程序开发。多线程无处不在,小到程序开发,大到操作系统原理,都存在多线程的应用
思考:一条路就要排队、等待,有了多条路径性能就提高了,就可以同时执行多任务操作
目前互联网三高代表:
高可用:数据不能出错
高性能:用户体验要好,等待时效不能太久
高并发:多人同时操作,有竞争的情况存在
*简单了解关键词:JUC并发编程
什么是多任务:现实中有很多同时进行的的例子,比如下图(1、开车+打电话+挂点滴;2、看手机+吃饭)。看似是多任务,其实在一个时间点我们的大脑还是只做了一件事情
例如:A(学习)、B(玩游戏)、C(吃饭)是最小时间点,当A、B、C时间点在几秒内时间内切换,就好像在同步做事情(一边学习、一边玩游戏、一边吃饭)
CPU也是如此,单核CPU在同一个单元时间内只能做一件事情,多核CPU在同一个单元时间内做同核数的事情
什么是多线程:
例如:三个电器同时连接到220V的电线上,当总开关打开,三个电器就可以同时工作
方法间调用与多线程使用区别:
方法间调用:普通方法调用,从哪里来到哪里去,闭合的一条路径
多线程使用:开辟了多条路径,main方法开启线程后,继续执行main方法程序,不关心、不等待新开线程程序执行如何
程序、进程和线程之间的关系:
比如QQ应用:编写QQ应用的代码就是程序;在操作系统中开始运行QQ应用程序就是一个进程;QQ应用中可以聊天、音视频等操作都是线程(一个进程中可包含多个线程)
程序是一个静态的概念,代码的指令;进程是CPU调度到程序的动态概念,一个程序对应一个进程;线程是指在一个进程中开辟多条路径执行
注:多线程都是模拟出来的,真正的多线程是指多个CPU,即多核,比如服务器。如果是模拟出来的多线程,即一个CPU的情况下,在同一个时间点,CPU只能执行一段代码,因为切换的很快,所以就有同时执行的错觉
java多线程核心概念总结:
- 线程就是独立的执行路径
- 在程序运行时,即使没有创建线程,后台也会存在多个线程,如:gc线程、主线程
- main()称之为主线程,为系统的入口点,用于执行整个程序
- 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预的
- 对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制
- 线程会带来额外的开销,如CPU调度时间,并发控制开销
- 每个线程是和自己的工作内存中数据间交互,当加载和存储主内存数据控制不当时,会造成数据不一致