`
ray_yui
  • 浏览: 220191 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

同步操作降低效率解惑

    博客分类:
  • Java
阅读更多

      相信在读者刚接触Java的时候,都曾经学习到线程安全的会影响效率,例如
HashTable < HashMap,StringBuffered < StringBuilder , Vector <  ArrayList ,当然原因也非常简单,因为这些类方法当中存在同步(synchronized)操作


      要说明为什么同步操作会影响效率,首先就要了解Java当中的多线程原理,Java当中多个线程之间是不能互相传递数据通信的,多线程之间的通信只能通过共享变量来完成.而JVM当中存在一个所有线程都共享的内存区域,称为主存,当我们new一个对象的时候,该对象将会放置到JVM主存当中,而每个线程他们都有各自独立的工作空间,在多线程环境下,每个线程操作某个对象时,会从主存当中获取对象然后生成副本放置在各自的工作空间当中.





      当操作对象时,线程首先会检查工作区间是否拥有对象的副本,若然没有,则读取主存生成副本,若拥有副本则直接对读取副本,然后对对象进行修改,然后同步到主存当中,由于多线程的执行顺序是不能确定的,取决于CPU,所以可能出现两条线程同时在主存获取到副本,对各自的副本进行修改先后提交导致错误数据出现的情况,而解决这个问题就要使用synchronized同步机制.





      在使用同步时,我们都知道只有一条线程能进入到已同步的逻辑当中,那为什么会影响效率?其实是一个很简单的道理.在不同步的状态下线程同副本中获取,就好比一个在旁边顺手拿东西,而在同步下,需要到JVM中的主存来获取,好比一个攀山涉水的过程,因为需要从主存当中重新获取主存中对象最新的信息,然后对其修改,提交回主存当中,而且申请锁是要会占用系统资源,所以这才是导致同步操作效率低的情况发生.
10
1
分享到:
评论
4 楼 793059909 2014-07-01  
JVM当中存在一个所有线程都共享的内存区域,称为主存,当我们new一个对象的时候,该对象将会放置到JVM主存当中,而每个线程他们都有各自独立的工作空间,在多线程环境下,每个线程操作某个对象时,会从主存当中获取对象然后生成副本放置在各自的工作空间当中.





      当操作对象时,线程首先会检查工作区间是否拥有对象的副本,若然没有,则读取主存生成副本,若拥有副本则直接对读取副本,然后对对象进行修改,然后同步到主存当中,由于多线程的执行顺序是不能确定的,取决于CPU,所以可能出现两条线程同时在主存获取到副本,对各自的副本进行修改先后提交导致错误数据出现的情况,而解决这个问题就要使用synchronized同步机制.

主存应该是堆
3 楼 maimode 2014-07-01  
还想知道更多细节
2 楼 桃花源记 2014-07-01  
1.既然必须要用多线程就不能不考虑同步;
2.既然考虑到同步问题,最好还是用这些HashTable、StringBuffered、Vector、currenthashmap等这些已经实现同步的类,要比加锁判断快很多很多;
3.同步操作会影响效率,也就是相对来说的,还是比单线程快很多
1 楼 avrilzkq 2014-06-30  
相当有道理

相关推荐

    Java解惑(中文版)

    通过阅读《Java解惑(中文版)》,开发者不仅可以解决实际编程中遇到的问题,还能加深对Java语言本质的理解,提高编程效率,降低bug率。对于初学者和有一定经验的开发者来说,这都是一本值得珍藏的参考资料。书中还...

    解惑云计算基础架构

    云操作系统使得远程办公变得更加便捷,实现了数据的实时同步,极大地提升了工作效率。 在迁移到云计算基础架构的过程中,企业和组织可能会遇到各种问题,如资源的有效整合、安全风险、性能优化等。为了解答这些疑惑...

    关于极域电子教室1111

    1. **屏幕广播**:教师可以将电脑屏幕实时广播给所有学生,便于展示讲解内容,使学生能够同步观看教师的操作,增强教学直观性。 2. **屏幕监控**:教师可以随时查看每个学生的电脑屏幕,了解学生的学习状态,及时...

    多媒体电子教室

    - **屏幕广播**:教师可以将电脑屏幕实时广播到所有学生的终端,让学生同步看到老师的演示,适用于讲解软件操作、观看视频教程等。 - **远程控制**:教师可以远程控制学生的电脑,进行一对一辅导或示范操作,帮助...

    19-工具框架1

    在IT开发中,框架和工具的选择对于...EventBus简化了组件间的通信,而DataBinding则通过MVVM模式实现了数据和UI的自动同步,降低了Android开发的复杂度。熟练掌握这两个框架能够极大地提升开发效率和代码的可维护性。

    人工智能-ChatGPT推进商业变现,多家巨头加速布局.rar

    3. **内容生成**:在新闻报道、广告创意、社交媒体营销等领域,ChatGPT可以自动生成高质量的内容,降低人力投入,提高内容产出效率。 4. **教育辅助**:在教育领域,ChatGPT可作为智能导师,为学生提供个性化的学习...

    燕大大学电气工程考研要点.docx

    - 软开关技术:研究ZVS、ZCS软开关技术,降低开关损耗,提高系统效率。 3. **电机与控制**: - 电机基础:深入学习电机原理,包括直流电机、交流电机、同步电机和异步电机的运行特性。 - 电机控制:掌握电机控制...

    包装纸盒CAD系统的Java解决方案.pdf

    这项技术已经被广泛应用于各个行业,尤其是包装行业,对于提高设计效率、缩短设计周期、降低设计成本等方面都有重要作用。在包装纸盒设计中,CAD技术可以帮助设计师准确地构建和模拟纸盒结构,进行拼版设计,以及...

    精易模块 V3.0.ec

    2. **扩展功能**:V3.0版本可能增加了新的API函数或类库,这些扩展功能可能涵盖网络通信、数据库操作、图形界面、文件处理等多个方面,以满足更多样化的开发需求。 3. **性能优化**:每个新版本通常都会对旧版存在...

    写给那些刚接触多线程的小伙伴,常见崩溃问题解惑-易语言

    在编程世界中,多线程是一种常见的编程模型,它允许程序同时执行多个任务,从而提高系统效率和响应性。然而,对于初学者来说,多线程可能会带来一系列挑战,特别是与内存管理相关的崩溃问题。本篇文章将针对刚接触多...

    Office 365技术概述

    - 员工可以在家中或者任何有网络连接的地方使用Office 365进行工作,保持高效率的同时降低了成本。 **2. 项目协作** - 对于需要多部门协作的大型项目,Office 365的Team Sites功能可以帮助团队成员更好地组织和...

    新高考智慧班牌解决方案.pptx

    - **信息发布**:它是一个强大的校园信息发布窗口,可将学校新闻、活动和通知实时推送到每个班级,提高信息传递的效率。 - **选课管理**:在新教改的背景下,智慧班牌支持多样化的选课方式,帮助学生根据自身需求...

    JAVA开发规范

    - **Spring事务传播机制解惑**:深入理解Spring框架下的事务管理机制,确保事务的正确配置和应用。 ### 表义命名规范 - **规则**:定义了领域对象、服务层、Web层等命名规则,以及常用的中英文术语对照,确保命名...

Global site tag (gtag.js) - Google Analytics