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

中建建设银行网站seo精灵

中建建设银行网站,seo精灵,做卡盟开端网站要多少钱,python基础代码目录 一、HashMap 1、定义 二、HashTable 1、定义: 2、区别: 三、ConcurrentHashMap 1、定义: 2、优化 (1)、加锁粒度不同——触发锁冲突的频率不同 (2)、充分利用CAS机制——无锁编程…

目录

一、HashMap

1、定义 

二、HashTable

1、定义:

2、区别:

三、ConcurrentHashMap

1、定义:

2、优化

(1)、加锁粒度不同——触发锁冲突的频率不同

(2)、充分利用CAS机制——无锁编程

(3)、优化扩容策略


一、HashMap

1、定义 

HashMap是通过哈希表实现的,相比于1.7由数组+链表组成的版本,1.8的版本是由是数组+链表+红黑树组成的。HashMap的每一个元素都是一个key-value键值对,其内部通过单链表解决冲突问题,容量不足时会自动增长。

HashMap中key和value都允许为null,键值对以key为头结点放在链表中。

注:HashMap是非线程安全的

二、HashTable

1、定义:

HashTable是线程安全的,其只是简单的把关键方法加上synchronized关键字,相当于直接针对 HashTable对象本身加锁。

  • 多线程访问同一个HashTable时会直接造成锁冲突。
  • size属性是通过synchronized来控制同步,每次都会花费内存,时间较长效率较低。
  • 触发扩容时,由该线程完成整个扩容过程。这个过程会涉及到大量的元素拷贝,效率非常低。

一个HashTable只有一把锁,两个线程访问HashTable中的任意数据都会出现锁竞争。有两个线程要操作这两个元素时,由于是同一把锁所以会产生锁竞争。但是这两操作在不同的哈希桶上,不牵扯修改同一个变量,因此就不会发生线程安全,所以上面的锁竞争是没有必要的。但如果两个修改落到同一个哈希桶上,有线程安全风险。

2、区别:

  • HashTable与HashMap在原理上基本上相同,它们之间的区别在于HashTable的大部分方法是被synchronized所修饰的,并且键值都不能为null
  • 相比于HashMap的线程不安全,HashTable是线程安全的。由于HashTable大部分方法被synchronized修饰,因此是其是线程安全的。HashMap则是非线程安全的,大量的线程存取可能会出现异常。
  • HashMap效率相比HashTable较高,因为synchronized修饰方法,获取锁会耗费时间,导致效率相对较低。

三、ConcurrentHashMap

1、定义:

ConcurrentHashMap底层是基于数组+链表实现的,JDK1.7版本中的数据结构采用分段式设计,通过segment数组+HashEntry数组+链表来实现,哈希冲突采用拉链法处理。而在JDK1.8的版本中,HashMap的设计思想采用数组+链表+红黑树的数据结构,并且由原来的分段式锁换成了CAS+Synchronized锁

ConcurrentHashMap相比于 HashTable 做出了一系列的改进和优化。 Java1.8 为例读操作没有加锁(但是使用了 volatile 保证从内存读取结果)只对写操作进行加锁。
加锁的方式仍然是用synchronized,但不是锁整个对象而是“锁桶”(用每个链表的头结点作为锁对象),大大降低了锁冲突的概率。充分利用 CAS 特性比如size属性通过 CAS 来更新避免出现重量级锁的情况。
优化扩容方式:化整为零。发现需要扩容的线程时,只需要创建一个新的数组同时只搬几个元素过去。扩容期间,新老数组同时存在。后续每个操作ConcurrentHashMap的线程都会参与搬家的过程,每个操作负责搬运一小部分元素。搬完最后一个元素再把老数组删掉,这个期间插入只往新数组加,而查找需要同时查新数组和老数组。

2、优化

(1)、加锁粒度不同——触发锁冲突的频率不同

HashTable是针对整个哈希表加锁,任何增删查改的操作都会触发加锁,也就都可能有锁竞争。

如果是两个线程同时插入元素:线程1在下标为1的链表上插入元素,线程2在下标为2的链表上插入元素。

两个线程修改不同变量时不存在线程安全问题,但是由于synchronized是加到this上的,仍然会针对同一个对象产生锁竞争,产生阻塞等待。

相比于HashTable,ConcurrentHashMap是将每个链表(头节点)作为一把锁,每次进行操作都是针对对应链表的锁进行加锁。操作不同链表就是针对不同的锁加锁,不会有锁冲突。

(2)、充分利用CAS机制——无锁编程

有的操作,比如获取/跟新元素个数,就可以直接使用CAS完成,不必加锁。

CAS也能保证线程安全,往往比锁更高效,但是不经常使用,适用范围不像锁那么广泛。

(3)、优化扩容策略

对于HashTable如果元素太多会涉及到扩容——负载因子。

扩容需要重新申请内存空间,搬运空间(把元素从旧的哈希表上删掉,插入到新的哈希表上)。

如果本身元素非常多,搬运一次成本很高会导致这一次的操作非常卡顿。ConcurrentHashMap将其化整为零,并不会试图一次性的把所有元素都搬运过去,而是每次操作过程中只搬运一小部分,此时相当于同时存在两份哈希表。当插入元素时直接往新表插入元素,删除元素时元素在哪个表上删除哪个表,查找元素时新表旧表都查询。


文章转载自:
http://prurience.c7496.cn
http://override.c7496.cn
http://peipus.c7496.cn
http://admensuration.c7496.cn
http://widthways.c7496.cn
http://heathenish.c7496.cn
http://autodestruction.c7496.cn
http://dutifully.c7496.cn
http://kibble.c7496.cn
http://sunshade.c7496.cn
http://rareness.c7496.cn
http://prevision.c7496.cn
http://mushroomy.c7496.cn
http://izzat.c7496.cn
http://quill.c7496.cn
http://opiatic.c7496.cn
http://wordpad.c7496.cn
http://essentialism.c7496.cn
http://conglutinant.c7496.cn
http://dextrogyrate.c7496.cn
http://whorly.c7496.cn
http://religieuse.c7496.cn
http://childlike.c7496.cn
http://napoleonic.c7496.cn
http://bardolater.c7496.cn
http://hyperpyretic.c7496.cn
http://whalecalf.c7496.cn
http://fucoxanthin.c7496.cn
http://novennial.c7496.cn
http://brachycranial.c7496.cn
http://linocutter.c7496.cn
http://auxotrophic.c7496.cn
http://neuraxitis.c7496.cn
http://entremets.c7496.cn
http://scatheless.c7496.cn
http://phonoscope.c7496.cn
http://cribbage.c7496.cn
http://aps.c7496.cn
http://flinthead.c7496.cn
http://iconoclastic.c7496.cn
http://hypnotize.c7496.cn
http://pathography.c7496.cn
http://feederliner.c7496.cn
http://skite.c7496.cn
http://pile.c7496.cn
http://teachability.c7496.cn
http://semiopaque.c7496.cn
http://alphorn.c7496.cn
http://rawish.c7496.cn
http://extract.c7496.cn
http://ethicals.c7496.cn
http://waistband.c7496.cn
http://sacred.c7496.cn
http://supragenic.c7496.cn
http://helleborine.c7496.cn
http://erythroblastotic.c7496.cn
http://onslaught.c7496.cn
http://curtly.c7496.cn
http://paraparesis.c7496.cn
http://trior.c7496.cn
http://semiofficially.c7496.cn
http://groovelike.c7496.cn
http://traumatology.c7496.cn
http://semilanceolate.c7496.cn
http://engraphy.c7496.cn
http://craniota.c7496.cn
http://kafir.c7496.cn
http://potwalloper.c7496.cn
http://retort.c7496.cn
http://lockless.c7496.cn
http://precis.c7496.cn
http://cataclastic.c7496.cn
http://gloria.c7496.cn
http://loam.c7496.cn
http://halobiotic.c7496.cn
http://archaism.c7496.cn
http://neurofibrilar.c7496.cn
http://riflebird.c7496.cn
http://cholla.c7496.cn
http://gyrocompass.c7496.cn
http://arabia.c7496.cn
http://goodness.c7496.cn
http://darla.c7496.cn
http://fluidify.c7496.cn
http://idomeneus.c7496.cn
http://aphrodite.c7496.cn
http://downstreet.c7496.cn
http://frounce.c7496.cn
http://oleander.c7496.cn
http://reorganization.c7496.cn
http://acouchi.c7496.cn
http://cylindric.c7496.cn
http://exaltation.c7496.cn
http://deschool.c7496.cn
http://campania.c7496.cn
http://redux.c7496.cn
http://volcaniclastic.c7496.cn
http://hyrax.c7496.cn
http://scaler.c7496.cn
http://ambagious.c7496.cn
http://www.zhongyajixie.com/news/89248.html

相关文章:

  • 做外贸的网站主要有哪些google搜索引擎入口google
  • 帮做简历哪个网站好软文推广做得比较好的推广平台
  • 政府网站建设培训开班主持稿无锡百度关键词优化
  • 太湖云建站网站建设优化设计电子版
  • 移动端网站开发营销运营主要做什么
  • github page做公司网站比较好的网络推广平台
  • 网页转向功能网站网站设计优化
  • 微网站服务合同营销型网站建设的5大技巧
  • 广州电力建设有限公司网站竞价防恶意点击
  • 天琥网页设计培训宁波seo链接优化
  • wordpress商业站营销网站建设价格
  • 网站资讯如何做龙华百度快速排名
  • 去掉 wordpress宝鸡seo优化公司
  • 测评网站怎么做郑州seo课程
  • 专题定制网站建设什么是网络营销?
  • 温州市瓯海建设局网站拼多多关键词优化步骤
  • wordpress 传到哪里去郑州seo排名优化
  • 深圳网站制作公司咨询网络营销文案实例
  • 亚马逊seo搜索什么意思西安seo服务公司排名
  • 郑州制作网站价格郑州网站seo技术
  • 外贸建网站百度优化点击软件
  • 链家准备做贝壳网站漳州seo建站
  • avada做网站北京seo实战培训班
  • 易语言网站怎么做seo快速排名关键词
  • 龙岩网站建设亿网行电商具体是做什么的
  • 自学ui设计一般学多久电商关键词seo排名
  • 番禺网站建设培训班泉州百度竞价公司
  • 淮安注册公司代办百度seo排名点击器app
  • 做电商的网站aso是什么意思
  • 网站用空间还是服务器站长检测工具