JAVA深化篇_25—— 多线程介绍

news/2024/11/9 3:05:16/

多线程介绍

多线程与并发编程

什么是程序?

程序(Program)是一个静态的概念,一般对应于操作系统中的一个可执行文件。

什么是进程?

执行中的程序叫做进程(Process),是一个动态的概念。其实进程就是一个在内存中独立运行的程序空间 。

现代操作系统比如Mac OS X,Linux,Windows等,都是支持“多任务”的操作系统,叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用逛淘宝,一边在听音乐,一边在用微信聊天,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。

什么是线程?

线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

有些进程还不止同时干一件事,比如微信,它可以同时进行打字聊天,视频聊天,朋友圈等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

进程、线程的区别

一个故事说明进程、线程的关系

乔布斯想开工厂生产手机,费劲力气,制作一条生产线,这个生产线上有很多的器件以及材料。一条生产线就是一个进程。

只有生产线是不够的,所以找五个工人来进行生产,这个工人能够利用这些材料最终一步步的将手机做出来,这五个工人就是五个线程。

为了提高生产率,有两种办法:

  1. 一条生产线上多招些工人,一起来做手机,这样效率是成倍増长,即单进程多线程方式
  2. 多条生产线,每个生产线上多个工人,即多进程多线程
  1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
  2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
  3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
  4. 调度和切换:线程上下文切换比进程上下文切换要快得多。

什么是并发

并发是指在一段时间内同时做多个事情。当有多个线程在运行时,如果只有一个CPU,这种情况下计算机操作系统会采用并发技术实现并发运行,具体做法是采用“ 时间片轮询算法”,在一个时间段的线程代码运行时,其它线程处于就绪状。这种方式我们称之为并发。(Concurrent)。

  1. 串行(serial):一个CPU上,按顺序完成多个任务
  2. 并行(parallelism):指的是任务数小于等于cpu核数,即任务真的是一起执行的
  3. 并发(concurrency):一个CPU采用时间片管理方式,交替的处理多个任务。一般是是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)

什么是主线程以及子线程

主线程

当Java程序启动时,一个线程会立刻运行,该线程通常叫做程序的主线程(main thread),即main方法对应的线程,它是程序开始时就执行的。

Java应用程序会有一个main方法,是作为某个类的方法出现的。当程序启动时,该方法就会第一个自动的得到执行,并成为程序的主线程。也就是说,main方法是一个应用的入口,也代表了这个应用的主线程。JVM在执行main方法时,main方法会进入到栈内存,JVM会通过操作系统开辟一条main方法通向cpu的执行路径,cpu就可以通过这个路径来执行main方法,而这个路径有一个名字,叫main(主)线程

主线程的特点

它是产生其他子线程的线程。

它不一定是最后完成执行的线程,子线程可能在它结束之后还在运行。

子线程

在主线程中创建并启动的线程,一般称之为子线程。


http://www.ppmy.cn/news/1189679.html

相关文章

百度小程序DIY小程序源码系统+轻松创建百度小程序,实现个性化功能 带完整的搭建教程

在现在大环境的影响下,小程序已经成为人们日常生活中不可或缺的一部分。百度小程序作为国内领先的小程序平台之一,为广大开发者提供了丰富的开发资源和工具。今天源码小编就来给大家分享一款百度小程序DIY小程序源码系统。百度小程序DIY小程序源码系统是…

报错-TypeError: Cannot read properties of undefined (reading ‘url‘)

背景:使用pinia进行状态管理,优化接口调用请求时,报错 TypeError: Cannot read properties of undefined (reading url) TypeError:无法读取未定义的属性(读取“url”) 解决:花括号的属性未定义&#xf…

【Git】Git使用指南+上传项目踩坑总结

记录Git 使用和命令解读: git init git add .git commit -m "first commit"git branch -M maingit remote add origin https://github.com/xxx.gitgit push -u origin main 这是最经常用到的使用 git上传项目的代码,值得注意的是&#xff0c…

docker离线部署

docker离线部署 1、目的 在可以连接互联网的情况下,可以在线安装Docker《Linux下Docker安装部署》,如果遇到内网服务器就没有办法进行在线安装,那么需要使用离线安装的方法。 2、下载安装包 创建工作文件夹: mkdir /opt/dock…

【C/C++】 常量指针、指针常量、指向常量的常指针

const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int,指针指向可以改,指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针,指针的值&am…

企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?

企业服务总线ESB是什么 下面这张图,稍微了解些IT集成的朋友应该不陌生。 随着信息化发展不断深入,企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通,如同一根根独立的烟囱。 但是企业业务是流程化的,…

电子电器架构 —— 车载网关初入门(三)

电子电器架构 —— 车载网关初入门(三) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数5000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关…

打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

从今年8月起,所有升级到HarmonyOS 4的手机用户在美团外卖下单后,可通过屏幕上的一个“小窗口”,随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”,就是实况窗功能。 实况窗:简…