JAVA中线程同步和io同步的区别

JAVA中线程同步和io同步的区别是:线程同步是 CPU 执行的同步所谓同步,是为了数据操作的原子性。io同步是数据流读写(比如磁盘、网卡)的同步。比如往 stream 先 write aaa,这时候 buffer 缓冲区就有了 aaa,再 write bbb,如果并行不同步操作的话,就会出现 abaabb 的乱序。

JAVA中线程同步和io同步的区别-Worktile社区

线程同步

线程同步即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。线程同步是 CPU 执行的同步所谓同步,是为了数据操作的原子性。

在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。

在多线程编程里面,一些敏感数据不允许被多个线程同时访问,此时就使用同步访问技术,保证数据在任何时刻,非常多有一个线程访问,以保证数据的完整性。

同步IO

在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO。

在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。

io同步是数据流读写(比如磁盘、网卡)的同步。比如往 stream 先 write aaa,这时候 buffer 缓冲区就有了 aaa,再 write bbb,如果并行不同步操作的话,就会出现 abaabb 的乱序。

多线程多进程的解决思路

因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务。每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他用户的线程不受影响。

多线程和多进程的模型虽然解决了并发问题,但是系统不能无上限地增加线程。由于系统切换线程的开销也很大,所以,一旦线程数量过多,CPU的时间就花在线程切换上了,真正运行代码的时间就少了,结果导致性能严重下降。

延伸阅读:

什么是Java

Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的”形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种”以对象为导向”的方式。使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

Java是Sun微系统公司在1995年推出的,推出之后马上给互联网的交互式应用带来了新面貌。最常用的两种互联网浏览器软件中都包括一个Java虚拟机。几乎所有的操作系统中都增添了Java编译程序。

使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

文章标题:JAVA中线程同步和io同步的区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37824

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月12日 下午4:35
下一篇 2023年2月12日 下午4:36

相关推荐

  • App Store怎么切换地区

    App Store切换地区的方法:1、点击帐户页面里的头像;2、输入密码并点击国家地区;3、点击更改进行切换地区。点击帐户页面里的头像是指从主界面进入APP store,进入后再点击右上角的头像,进入帐户页面之后点击头像进入。 一、App Store切换地区的方法 1、点击帐户页面里的头像 点击帐户…

    2023年3月25日
    2.7K00
  • plm研发管理平台

    PLM (Product Lifecycle Management) 研发管理平台 是一套帮助企业在整个产品寿命周期内实现数据管理和流程优化的系统。重点功能包括①产品数据管理、②协同工作流程、③供应链管理和④集成与自动化。 其中,产品数据管理是PLM平台的核心,它涉及产品从概念设计到退市的所有信息和…

    2024年1月10日
    9400
  • 云原生应用中的服务发现和注册机制

    在云原生应用环境中,服务发现与注册机制为组件间的高效通信提供了基础。1、服务发现允许组件动态查找网络中的服务端点;2、服务注册则是服务实例将自己的存在公布给系统的过程。 服务注册中一个关键的概念是注册中心,通常是一个可靠的存储服务实例信息的系统。在云环境中,服务实例可能频繁地启动或消失,服务发现机制…

    2023年12月20日
    14200
  • Java编程软件有哪些

    Java编程软件有:1、IntelliJ IDEA;2、Navicat;3、XMind;4、TeamViewer;5、Visual_Paradigm;6、postman HTTP接口调用工具;7、MobaXterm等。IntelliJ IDEA是java编程语言开发的集成环境。 一、IntelliJ…

    2023年2月9日
    1.0K00
  • 工作日记软件哪个好用

    这些工作日记软件好用:1、Evernote;2、Trello;3、OneNote;4、Day One;5、Journey;6、有道云笔记。Evernote是一款综合性的笔记软件,不仅可以记录文字、图片、音频等多种信息,还可以做到跨平台同步、全文搜索等高级功能。 1、Evernote Evernote…

    2023年4月9日
    1.8K00
  • 技术路线图怎么做

    做技术路线图的步骤:1、确定目标;2、确定时间范围;3、收集信息;4、确定技术方向;5、绘制技术路线图;6、分享技术路线图。在制作技术路线图之前,首先要确定目标。你需要考虑你的技术路线图是为了什么目的而制作的。 1、确定目标 在制作技术路线图之前,首先要确定目标。你需要考虑你的技术路线图是为了什么目…

    2023年2月26日
    92900
  • Java中的多线程编程技巧是什么

    Java的多线程编程技巧主要包括:1、搞清楚线程的生命周期、2、掌握线程同步和并发工具、3、有效利用线程池、4、合理选择并发集合、5、避免线程安全问题、6、正确处理线程异常和死锁、7、针对性能优化选择合适的线程策略。这些技巧能够确保并发程序的性能与可靠性。在提出的关键要素中,特别重要的是3、有效利用…

    2024年1月8日
    11200
  • C语言char数组字符串时,为什么在用输出printf时,数组前不加间接寻址符号*

    在C语言中,char数组常常用来存储字符串。字符串在C语言中是一个字符数组,以’\0’结尾,即空字符。在使用printf输出字符串时,我们通常不需要在char数组前加上间接寻址符号’*’,这是因为在C语言中,数组名本身就是一个指向数组首元素的指针,即数…

    2023年3月1日
    76500
  • 什么是Reactor模型

    Reactor模型是一种在事件驱动架构中用于处理非阻塍I/O操作的设计模式。该模型利用单一或多重反应器来接收和分派到达的事件或请求,从而提供了一种非阻塞、高并发的解决方案。与传统的多线程模型相比,Reactor模型更加高效,因为它最小化了上下文切换和线程同步的开销。本文将探讨Reactor模型的基本…

    2023年7月16日
    39500
  • Scrum项目的持续交付策略是什么

    在Scrum项目中实施持续交付策略,关键是确保对增量开发、自动化测试、持续集成、频繁部署和反馈循环的有效运用。增量开发意味着在短周期内不断地生成可交付的产品增量。自动化测试确保每次提交新代码时的质量保证。持续集成涉及将所有开发者的工作合并到共享分支并进行测试确保没有冲突。频繁部署保证将增量更快地交付…

    2023年12月12日
    16600

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部