当前位置: 首页 > news >正文

多线程简介和在JAVA中应用

多线程简介和在JAVA中应用

    • 什么是多线程what
    • 为什么使用多线程why
    • 什么时候使用多线程when
    • 什么地方使用多线程where
    • 如何使用多线程how
    • JAVA多线程简介
    • 多线程在项目中的应用
      • A项目
      • B平台
      • C系统-文件采集
      • D系统
    • 多线程使用总结

什么是多线程what

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。
处理器级别上实现“多线程”是采用一种并发执行机制,简单地说就是把一个处理器划分为若干个短的时间片或者,每个时间片依次轮流地执行处理各个应用程序,由于一个时间片很短,相对于一个应用程序来说,就好像是处理器在为自己单独服务一样,从而达到多个应用程序在同时进行的效果 (多个处理器就是多个处理器同时处理不同线程,真正意义上的多线程)。
把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序(进程)划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程,多个线程一起去协同完成任务,通过充分去共享资源来达到提升效率,这就是多线程程序。
线程里面的一些概念
进程,线程,串行,并发,并行,同步,异步,阻塞,非阻塞,死锁,信号量:
进程: 操作系统(OS)进行资源(CPU、内存、磁盘、IO、带宽等)分配的最小单位。
是OS对正在运行的程序的一种抽象,是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和 其它各种系统资源组成。打开一个浏览器、一个聊天窗口分别是一个进程。进程可以有多个子任务,如聊天工具接收消息、发送消息,这些子任务是线程。
线程: CPU调度和分配的基本单位。
一个或多个线程组成进程,每个线程都运行在同一进程的上下文中,共享进程资源(代码、全局变量等)。线程可比作是轻量级的进程,是程序执行的最小单位,线程间的切换和调度的成本远远小于进程。多核 CPU 时代意味着多个线程可以同时运行,这减少了线程上下文切换的开销。
每个进程至少有一个主执行线程,它无需由用户主动创建,一般由系统自动创建。系统创建好进程后,实际上就启动了执行该进程的执行主线程,执行主线程以函数地址形式,即程序入口函数(如 main函数),将程序的启动点提供给操作系统。主执行线程终止了,进程也就随之终止。
串行,并发,并行:
串行: 多个任务,执行时一个执行完再执行另一个。
并发: 多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
并行: 每个线程分配给独立的核心,线程同时运行。
单核CPU多个进程或多个线程内能实现并发(微观上的串行,宏观上的并行);多核CPU线程间可以实现微观上并行。
同步,异步,阻塞,非阻塞,信号量,死锁:
同步和异步描述的是消息通信的机制。
同步: 当一个request发送出去以后,会得到一个response,这整个过程就是一个同步调用的过程。哪怕response为空,或者response的返回特别快,但是针对这一次请求而言就是一个同步的调用。
异步: 当一个request发送出去以后,没有得到想要的response,而是通过后面的callback、状态或者通知的方式获得结果。
阻塞: 一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待资源或信号将它唤醒。(释放CPU,不释放内存)
非阻塞: 指调用方发出请求的线程在没有等到结果时不会被挂起,直到得到结果后才返回,阻塞和非阻塞最大的区别就是看调用方线程是否会被挂起。
信号量: 其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量,用户进程通过使用操作系统提供的一对原语来对信号量进行操作,从而方便的实现了进程互斥。
死锁: 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

为什么使用多线程why

从原理的角度考虑:
使用多线程主要目的是为了同步完成多项任务,主要目的不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。现在CPU基本都是多核的,如果只用单线程,那就是只用到了一个核心,其他的核心就相当于空闲在那里了,多CPU或多核CPU系统中,使用线程提高CPU利用率。
从用户的角度考虑:
为了得到更好的系统服务,并发、并行操作,提高应用程序响应速度(比如游戏界面的同时可以进行聊天;比如服务器端并发线程响应用户的请求)。
从程序的角度考虑:
就是合理地

http://www.dtcms.com/a/496410.html

相关文章:

  • 大悟网站制作什么网站免费做简历
  • swift 修改图片亮度
  • 多模态实体识别:跨越模态鸿沟的智能技术
  • 免费网站推广平台人力外包
  • 海南省澄迈住房和城乡建设厅网站重庆百度快速优化
  • 前几年做那些网站能致富网站推广技巧有哪些
  • Sentinel安装部署
  • Java对象比较与克隆:Comparable、Comparator接口与深拷贝实现
  • 网站开发游戏php网站开发建设
  • MySql:库的操作
  • ssh中neovim无法复制文本 clipboard
  • 网站优化系统红河做网站的公司
  • Switch升级 20.40 版本导致 2162-0002大气层报错的解决办法
  • 做暖暖小视频网站类似凡科建站的平台
  • 做网站的好公司大数据营销的特征有哪些
  • 高端网站建设加盟wordpress采集后排版
  • 【修订中】chatgbt的方法
  • 福州网络推广建站移动网站开发基础知识
  • 手机医疗网站模板广西网站建设价格多少
  • 大语言模型的幻觉问题:机理、评估与抑制路径探析
  • 社区网站建设资金申请汽车配件网上商城
  • java8中常用的工具函数
  • 家庭HMI:重塑智能家居的人机交互新范式
  • python网站开发简单吗网站维护很难吗
  • Cortex-M 中断机制基础
  • Linux C/C++ 学习日记(27):KCP协议(三):源码分析与使用示例
  • 网站怎么解析到域名wordpress 恢复
  • hype做网站动效最新网站建设哪家公司好
  • C++ 多线程实战 14|如何系统性避免死锁
  • 平顶山股票配资网站建设网站首页轮播图怎么做