为什么要使用多线程?多线程的优点和缺点是什么?

2023-05-16

首先说下多线程出现的原因:

为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等

多线程的好处:

1.使用线程可以把占据时间长的程序中的任务放到后台去处理

2.用户界面更加吸引人,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度

3.程序的运行效率可能会提高

4.在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.

多线程的缺点:

1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.

2.更多的线程需要更多的内存空间

3.线程中止需要考虑对程序运行的影响.

4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生

第三部分---------------Java中的线程------------------

1、        什么是进程?

答案:进程其实就是一个静态的概念。在机器上实际上运行的都是线程(线程,进程的一部分。)

2、        什么是线程?

答案:线程是一个程序内部的顺序控制流。一个进程里面有一个主方法叫main方法。是一个进程里面不同的执行路径。

3、        什么时候会用到线程?

答案:当系统中或者开发中。遇到高并发    并行的情况下为了解决负载均衡的问题,就会使用到线程。线程可以提高cpu的利用率。

4、        在一个时间点上。Cpu只能支持一个线程的运行(由于windows在一个进程中将多个线程执行速度非常的快。所以好多人认为是那是多线程。其实在同一个时间点上只有一个线程在运行)。

5、        注意:真正的多线程就是当你的机器为双cpu或者是双核的。那么这个时候确实是真正的多线程在运行。

6、        Java的线程是通过java.long.thread类来实现的。

7、        一个新的线程需要两步来执行@创建线程@启动线程

8、        如何创建一个新的新的线程呢?

答案:Thread  t=new Thread();每创建一个新的thread对象就相当于创建了一个新的线程。

A)       Thread里面一个特殊的方法run();这个方法就是为执行一个线程而做准备的(当你创建了一个新的线程以后,所有实现的业务逻辑全部在run()方法里面),也就是说在run()方法里面写啥业务。线程就执行实现啥业务。

B)       启动一个线程用start()方法,也就是说当调用Start()方法线程准备就绪以后。才能去启动执行run()方法里面的所有业务逻辑。、

C)       总结:进程有独立的运行内存和空间。而线程是进程的一个执行单元。相同的线程是共享内存空间的。所以进程运行上对内存的开销比较大。而线程比较节省内存。

D)       Therad线程类提供了好多方法。最常用的有sleep()方法,调用此方法是让一个线程处于睡眠状态。它是Thread类的一个静态方法。

E)        注意:sleep()在使用过程中会抛出异常。当在处理异常的时候用try{}catch{}。当重写的方法无法用throws来处理异常时。就必须用try{}catch{}来处理异常。

F)        如何结束一个线程?调用方法shutDown()方法。可以定义一个变量。比如:boolean flag=true;将变量变为false不就停止了吗?

G)       Thread类的join()方法——合并某个线程。

H)       Yield()方法,让出cpu让其他线程执行的机会。

I)          线程的优先级:setPriority();用此方法就是设置线程的优先级。

 

9、        线程同步:多个线程同时访问同一资源时。线程与线程之间协调的这一过程就叫做线程同步。

A)  synchronized ()方法,指同步方法的意思。锁定线程。同步方法实际就是在执行方法的时候当前的对象呗锁定。(锁定方法实际就是锁定了当前方法的对象。必须等当前线程执行完才能执行下一个线程),线程的同步也就是使线程处于安全化状态。

B)    线程的死锁:两个线程相互等待的状态就形成了死锁。

C)   如何解决死锁:加大锁的粒度




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要使用多线程?多线程的优点和缺点是什么? 的相关文章

  • PX4飞控之导航及任务架构

    本文重点介绍PX4飞控的Navigator和mission控制框架和逻辑 Navigator导航部分是无人机自主飞行控制的核心所在 xff0c 其中包括自主起飞 自主降落 自主返航 自主任务以及GPS失效保护等各个部分 搞懂这个部分有助于理
  • PX4飞控之位置控制(1)整体架构

    位置控制是无人机飞控的核心算法之一 xff0c 一方面根据commander中的flag标志位和Navigator中提供的航点信息进行控制 xff08 自主模式下 xff09 xff0c 另一方面得到期望姿态角 xff08 setpoint
  • spring整合ehcache找不到org.springframework.cache.ehcache.EhCacheCacheManager的解决方案

    一般org springframework cache ehcache EhCacheCacheManager和org springframework cache ehcache EhCacheManagerFactoryBean会同时找不
  • CC3200之GPIO引脚分析

    预备知识 xff1a xff08 1 xff09 volatile关键字 xff1a volatile定义的变量一般为无需开发者自己赋值 xff0c 会自动改变的变量 在普通的程序中 xff0c 编译器都具有优化功能 xff0c 为了避免浪
  • OpenStack 之 OVS介绍

    一 概述 Open vSwitch的官方定义 xff1a Open vSwitch是一个具有工业级质量的多层虚拟交换机 通过可编程扩展 xff0c 可以实现大规模网络的自动化 xff08 配置 管理 维护 xff09 它支持现有标准管理接口
  • OVN是OVS 5倍的性能--性能测试报告

    我们已经对OVN做了许多次的性能测试 xff0c 但是缺少一个OVN和 xff08 ML2 43 OVS xff09 的性能对比测试 我和许多人一起对比了这2种后端 本文是第一部分 xff1a 控制平面的性能对比 后面会另外发文公布数据平面
  • OpenStack 中的5种分配IPv6地址的方式

    在OpenStack Pike版本中创建IPv6子网时 xff0c 有五种设置地址方式供选择 上图中这五种方式显示不全 xff0c 现将其全部展示 No options specified xff08 Default xff09 xff0c
  • STM32 | TCP通信实例分析

    1024G 嵌入式资源大放送 xff01 包括但不限于C C 43 43 单片机 Linux等 关注微信公众号 嵌入式大杂烩 xff0c 回复1024 xff0c 即可免费获取 xff01 前言 关于socket的笔记 xff0c 之前已经
  • RT-Thread和Freertos的区别?

    关注 嵌入式大杂烩 xff0c 选择 星标公众号 一起进步 xff01 Freertos是一个国外推出的一个迷你的实时操作系统内核 xff0c 开源 xff0c 功能包括 xff1a 任务管理 时间管理 信号量 消息队列 内存管理 记录功能
  • C语言 | 函数指针作为函数的参数

    1024G 嵌入式资源大放送 xff01 包括但不限于C C 43 43 单片机 Linux等 关注微信公众号 嵌入式大杂烩 xff0c 回复1024 xff0c 即可免费获取 xff01 函数指针有两种常用的用法 xff0c 一种是作为结
  • 解析I2C通信协议

    一 I2C的概念 1 I2C总线是PHLIPS公司推出的一种串行总线 xff0c I2C总线只有两根双向信号线 其中一根是数据线SDA xff0c 另一根是时钟线SCL 2 每个接到I2C总线上的器件都有唯一的地址 发送数据到总线上的称为发
  • uCOS-II任务间通信之信号量 [转载]

    uCOS II任务间通信之信号量 信号量是什么 xff1f 信号量有什么用 xff1f 信号量是可以用来表示一个或多个事件的发生 xff0c 还可以用来对共享资源的访问 uCOS II提供了5个对信号量进行操作的函数 如下所示 xff1a
  • 关于STM32串口3的使用,接收并解析一帧数据

    关于STM32串口3的使用 xff0c 接收并解析一帧数据 当stm32的串口1被使用时 xff0c 我们可以使用其他串口来使用 步骤 xff1a 串口3定义 初始化 xff1b 串口3中断服务函数 接收的一帧数据并判断是否正确 xff1b
  • Windows Docker Desktop 无法启动报错 Docker Desktop is shutting down 的可能解决办法

    之前有一次 docker 启动到一半的时候电脑蓝屏了 xff0c 电脑重启之后 docker 就无法启动了 xff0c 一直报错 Docker Desktop is shutting down 网上查了一下 xff0c 发现一个可能的解决办
  • ESP8266的开发环境搭建、解决编译[Makefile:xxx: .subdirs] Error 2错误问题

    ESP8266的开发环境搭建 解决编译错误问题 ESP8266的开发环境搭建链接如下 ESP8266的开发环境搭建 在最后工程加载完毕后右击该工程 xff0c 在弹出的列表中选择 Build Project 编译工程 xff0c 如果在Co
  • 【数字图像处理】YUV420转RGB并BMP存储<纯C++实现>

    1 读取akiyo qcif yuv YUV420文件 xff0c 按帧读取 xff0c 转RGB xff0c 并存储到BMP文件 2 暂时实现读取一帧并存储一张BMP图片 若要读取YUV序列 xff0c 写成循环方式即可 3 生成的BMP
  • Unable to connect to the remote server 问题(已经解决)

    Unable to connect to the remote server 问题 xff08 已经解决 xff09 参考文章 xff1a xff08 1 xff09 Unable to connect to the remote serv
  • 【Android 源码学习】 init启动

    目录 Android 源码学习 init启动从main cpp开始init cpp 部分逻辑init启动zygote属性服务总结 Android 源码学习 init启动 Android 11 init 启动流程学习 主要是学习刘望舒腾讯课堂
  • Linux面试题 系统启动流程

    BIOS 基本输入输出系统 xff0c 帮助我们初始化硬件 硬盘分区有两类 xff1a MBR和GPT MBR单块硬盘不能大于2T xff0c 主分区的数量不能超过4个 xff1b MBR方案存储在第一个扇区的前446个字节 xff08 共
  • C语言中十进制转换十六进制(细解)

    十进制转换十六进制 span class token macro property span class token directive keyword include span span class token string lt std

随机推荐

  • 关于strtok的使用

    1功能 xff1a strtok是一个比较特殊的 xff0c 用于切割字符串的函数 2 使用我们先来看一下strtok的使用 strtok C 43 43 Reference char strtok xff08 char str xff0c
  • STL简介

    目录 一 STL是什么 二 STL怎么产生的 三 STL的六大组件 一 STL是什么 STL是c 43 43 标准库的重要组成部分 包含数据结构和算法的框架 比如 xff1a vector list sort STL Istream ost
  • SLAM秋招面经(大疆、华为、海康、图森、小马智行、地平线、momenta、滴滴)

    SLAM秋招面经 xff08 大疆 华为 海康 图森 小马智行 地平线 momenta 滴滴 xff09 前段时间一直没更新博客 xff0c 因为论文 实习 秋招一系列事情都非常忙 xff0c 如今秋招接近尾声 xff0c 稍有空闲 xff
  • 基于单目视觉的四旋翼定点降落——概述(一)

    从去年开了这个博客起就一直没有写过 xff0c 好在今天实验有了一些小进展 xff0c 所以想分享给大家 首先讲讲我做了些什么吧 我想做一个基于单目视觉的四旋翼定点降落 xff0c 能够让四旋翼从任意位置起飞之后 xff0c 完全自主地降落
  • 二分查找的经典样例

    对于查找任务来说 xff0c 通常就是寻找目标值或者目标区间出现的位置 而看到排序数组 43 查找 xff0c 第一反应就是二分查找 以下问题都可以直接转化到这个问题上来 34 在排序数组中查找元素的第一个和最后一个位置 查找元素出现的第一
  • 基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新 xff0c 怪我太懒啦 今天要特别感谢舒仔仔同学 xff0c 我的好队友帮我写了这篇博文 这篇文章主要讲了如何通过mavros来控制pixhawk 硬件逻辑是这样子 xff0c 我们先搞一个odroid xff08
  • 基于单目视觉的四旋翼定点降落——如何搭建基于gazebo的pixhawk仿真环境(三)

    搭建仿真环境是相当重要的 xff0c 因为我们的代码如果直接放到飞机上去跑 xff0c 那么很容易炸机 通过仿真环境 xff0c 我们至少可以保证代码逻辑的正确性 这篇文章还是要感谢我的队友舒仔仔的帮助 xff0c 话不多说 xff0c 上
  • 基于单目视觉的四旋翼定点降落——地标设计与识别算法(四)

    前面讲了三讲的环境搭建 xff0c 今天终于要开始讲算法啦 先来描述一下定点降落的过程 xff0c 四旋翼上搭载的摄像头识别地面上的标志 xff0c 然后以地面标志作为引导 xff0c 降落到标志所在处 所以 xff0c 我们今天先来讲讲地
  • 基于单目视觉的四旋翼定点降落——位姿估算与控制算法(五)

    之前 xff0c 我们已经能够成功将地标识别出来 xff0c 那么如何引导无人机向地标飞行呢 xff1f 我们可以分为两部分 xff1a 一 计算无人机与地标的相对位置 xff1b 二 根据相对位置控制无人机飞行 这部分和之前几章不太一样
  • 利用px4flow实现四旋翼室内定点悬停

    最近博主在玩一个无人机比赛 xff0c 需要完成一些室内飞行的任务 于是 xff0c 为了增强飞行的可靠性 xff0c 用到了px4flow光流模块 xff0c 当然这需要和pixhawk飞控来配套使用 首先简单介绍一下这个模块 xff0c
  • K8s系列之:网络原理

    K8s系列之 xff1a 网络原理 一 K8s网络模型二 Docker的网络模型三 网络的命名空间1 网络命名空间的实现2 网络命名空间的操作3 网络命名空间的一些技巧 四 Veth设备对1 Veth设备对的操作命令2 Veth设备对如何查
  • 用nginx代理tomcat,做https时只需nginx配置证书,443转发到8080即可

    配置如下 server span class token punctuation span listen 80 default server listen span class token punctuation span span cla
  • PB datawindows 动态创建数据窗口

    在实际应用中 xff0c 经常需要根据用户需求来动态创建数据窗 xff0c 一般方法是这样的 在一个window中加入一个数据窗控件 xff0c 如dw new 但是该数据窗没有data object 空白的 就可以用以下语法来创建 xff
  • 一 Prometheus + node_exporter + Grafana 安装和部署

    1 Prometheus Server 端安装 1 1 Promethrus Server 端下载 cd data src wget https github com prometheus prometheus releases downl
  • PHPExcel save Severity: Compile Error --> 'break' not in the 'loop' or 'switch' context /media/sf_

    PHPExcel save出错 xff1a span class hljs attribute Severity span Compile Error span class hljs function gt span span class
  • 关于 C++ 中的 RAII

    名字起得不好 xff0c 实际上是想体现资源管理和对象生命周期绑定 xff0c 在构造函数里获取资源 xff0c 在析构函数里释放资源 RAII 的有趣之处在于利用栈对对象的生命周期进行管理 xff0c 也就间接实现了对资源的管理 xff0
  • 深度剖析vector

    vector 的介绍 vector是表示可变大小数组的序列容器同数组一样 xff0c vector采用连续的存储空间来存储元素 xff0c 因此可以采用下标对vector的元素进行访问 xff0c 和数组一样高效 xff0c 与数组不同的是
  • CMakeLists.txt文件基本使用(转载)

    https blog csdn net afei article details 81201039 CMakeLists txt 语法介绍与实例演练 我觉得原作者写得非常好
  • ubuntu 16.04 ProxyChains4 编译安装(以及配置github)

    一 简介 ProxyChains4 是linux平台的一个代理切换软件 最近在ubuntu 上使用ss 进行上网 xff0c 每次代理的切换都是非常麻烦 ProxyChains4 能很好的解决socks代理的系统设置问题 二 安装 git
  • 为什么要使用多线程?多线程的优点和缺点是什么?

    首先说下多线程出现的原因 为了解决负载均衡问题 充分利用CPU资源 为了提高CPU的使用率 采用多线程的方式去同时完成几件事情而不互相干扰 为了处理大量的IO操作时或处理的情况需要花费大量的时间等等 比如 读写文件 视频图像的采集 处理 显