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

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

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

在使用同步时,我们都知道只有一条线程能进入到已同步的逻辑当中,那为什么会影响效率?其实是一个很简单的道理.在不同步的状态下线程同副本中获取,就好比一个在旁边顺手拿东西,而在同步下,需要到JVM中的主存来获取,好比一个攀山涉水的过程,因为需要从主存当中重新获取主存中对象最新的信息,然后对其修改,提交回主存当中,而且申请锁是要会占用系统资源,所以这才是导致同步操作效率低的情况发生.

java 同步操作降低效率解惑相关推荐

  1. 【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )

    文章目录 一.以动态特性编译的 Groovy 类 二.Groovy 语言与 Java 语言执行效率对比 三.以静态特性编译的 Groovy 类 一.以动态特性编译的 Groovy 类 Groovy 类 ...

  2. Java遍历Map效率对比

    Java遍历Map效率对比 Java 中Map容器的遍历有多种方式,但是不同的方式效率会大有不同,以前没有注意这些细节,随意使用遍历方式在本地可能没有什么影响,但是在项目在高频使用需要特别注意,尽量使 ...

  3. office起动缓慢_win10系统office2003启动速度缓慢降低效率的设置教程

    今天和大家分享一下win10系统office2003启动速度缓慢降低效率问题的解决方法,在使用win10系统的过程中经常不知道如何去解决win10系统office2003启动速度缓慢降低效率的问题,有 ...

  4. JAVA学习脚印10:解惑java 中UTF-16与char

    JAVA学习脚印10:解惑java 中UTF-16与char java中的char.utf-16编码.代码点.代码单元等概念,做一个了解还是有必要的. 1.基本概念 1) Java的字符类型和字符串类 ...

  5. java 多态 降低耦合_java多态

    Java多态就是为了降低耦合,方便我们开发的一种特性. 比如我写了一个动物的接口.然后我通过接口实现了猫和狗这个类. 在我需要使用的时候我可以这样实例化对象 动物 w = new 猫. 这就是向上转型 ...

  6. java提高代码效率_提高java代码运行效率

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  7. java 强制转换 效率_Java 性能优化:35 个小细节,让你提升 Java 代码的运行效率...

    代码优化细节 1.尽量指定类.方法的final修饰符 2.尽量重用对象 3.尽可能使用局部变量 4.及时关闭流 5.尽量减少对变量的重复计算 6.尽量采用懒加载的策略,即在需要的时候才创建 7.慎用异 ...

  8. php 开发 比 java 快_PHP 比 Java 的开发效率高在哪?

    做了几年PHP,最近在转Java,已经用Java做了半个互联网项目的人强答一下. 个人认为,PHP开发效率高主要是因为弱类型特性和自带强力函数库的原因. Java有太多的条条框框,对于我这种刚学的人来 ...

  9. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  10. java hashmap存取效率_HashMap为什么存取效率那么高?

    1.Hash 也叫散列.哈希. 主要用于信息安全领域中的算法,把长度不同的信息转化为杂乱的128位的编码,找到一种数据内容与地址之间的映射关系. 注意:不同的输入可能会散列成相同的输出 我们最熟悉的O ...

最新文章

  1. 全国计算机等级考试成绩查询陕西,陕西计算机等级考试成绩查询入口
  2. linux kill杀死进程
  3. The Power of Ten – Rules for Developing Safety Critical Code
  4. 文巾解题 面试题 01.01. 判定字符是否唯一
  5. Silverlight MMORPG团队项目截图
  6. 一个servlet跳到另一个servlet_另一个太阳下的天与地
  7. 三十、开始前端Vue.js的学习之路
  8. mysql数值类型总结及常用函数
  9. MongoDB Shell和Robo3T使用以及与SQL语法比较
  10. Java Swing Mysql学生成绩管理系统
  11. Graph Embedding:word2vec更进一步?
  12. Android中关于Volley的使用(一)加载图片
  13. POJ1769(线段树+DP)
  14. 笔者认为,中国的互联网行业需要真正的CEO
  15. php值传递和引用传递
  16. 【Java_基础】java中static与final关键字的区别
  17. Windows64位 python3.6安装pyHook
  18. Java中怎么打开jsp_jsp文件怎么打开 打开jsp文件的详细步骤【详细介绍】
  19. 安卓系统源码编译系列(一)——下载安卓系统源码教程
  20. 中断机制及ZCU102 DMA中断实例

热门文章

  1. YYKit-YYCache分析
  2. linux卸载+oracle客户端,官方的linux上卸载oracle步骤
  3. c# gerber文件读取_Gerber文件查看方法
  4. 问题:C语言习题5.22 - 学生成绩的处理
  5. 实用主义学python 云盘_多领域实用主义学Python项目视频教程-2018年麻瓜编程
  6. c语言stdio函数大全,初学者常用的stdio库,原来还有这么多知识点
  7. 一帆风顺幼儿园管理软件 v3.01 bt
  8. K3CLOUD业务系统编码规则设置
  9. OPPO R11刷机初体验
  10. Python中 实现过采样和下采样