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

网站设计公司-信科网络百度推广如何计费

网站设计公司-信科网络,百度推广如何计费,郑州医科大附属男科医院,做国外搞笑网站有哪些ConcurrentHashMap是Java中的一个线程安全的哈希表实现,它通过一系列精妙的机制来保证线程安全。以下是ConcurrentHashMap保证线程安全的主要方式: 分段锁(Segment Locking,Java 1.8之前): 在Java 1.8之前的…

ConcurrentHashMap是Java中的一个线程安全的哈希表实现,它通过一系列精妙的机制来保证线程安全。以下是ConcurrentHashMap保证线程安全的主要方式:

  1. 分段锁(Segment Locking,Java 1.8之前)

    • 在Java 1.8之前的版本中,ConcurrentHashMap通过分段锁机制将整个哈希表分成多个段(Segment),每个段维护着一个独立的哈希表。
    • 读操作时,并不需要获取整个哈希表的锁,而是只需要获取对应段的锁。这样可以降低并发度限制,允许多个线程同时读取不同的段,从而提高读操作的并发性能。
    • 写操作时,需要锁定对应的段。虽然这仍然是一种锁机制,但相比于Hashtable等旧版哈希表的全局锁,分段锁能够显著提高并发性能。
  2. CAS(Compare and Swap)操作和synchronized机制(Java 1.8及以后)

    • Java 1.8版本的ConcurrentHashMap引入了新的数据结构和算法,进一步提高了并发性能。
    • 在写操作中,ConcurrentHashMap使用CAS操作来保证更新的原子性。CAS操作是一种无锁的同步机制,它通过比较内存中的值与期望值,如果相等则进行更新,否则重试。这种机制避免了全局锁的开销,提高了写操作的并发性能。
    • 同时,Java 1.8版本的ConcurrentHashMap也使用了synchronized机制来辅助实现线程安全,特别是在处理链表或红黑树等复杂数据结构时。
  3. 内部数据结构

    • ConcurrentHashMap使用了一种特殊的哈希表结构,即数组+链表+红黑树的结合体。
    • 当链表长度超过一定阈值时,会将链表转换为红黑树,以提高查找、插入和删除操作的效率。这种数据结构的设计使得在单个段上的操作更加高效。
  4. 读写分离

    • ConcurrentHashMap允许多个线程同时进行读取操作,而写入操作会引起更细粒度的锁定。这样,多个读操作可以并发进行,提高了并发性能。
    • 只有在写入操作时,才会对相关的段进行锁定,保证写入的原子性和一致性。
  5. 迭代器的线程安全性

    • ConcurrentHashMap的迭代器也是线程安全的。在迭代过程中,即使有其他线程对ConcurrentHashMap进行并发的修改操作,迭代器也不会抛出ConcurrentModificationException异常。
    • 这是因为迭代器在迭代期间保持对ConcurrentHashMap的结构的快照,而不是直接操作ConcurrentHashMap。

综上所述,ConcurrentHashMap通过分段锁(Java 1.8之前)、CAS操作和synchronized机制(Java 1.8及以后)、特殊的内部数据结构、读写分离以及线程安全的迭代器等多种机制来保证线程安全。这些机制共同作用下,使得ConcurrentHashMap能够在多线程环境中提供高效的并发性能和数据一致性。

以下是一个使用ConcurrentHashMap来保证线程安全的代码示例。这个例子将展示如何在多线程环境下安全地更新ConcurrentHashMap中的数据。

假设我们需要统计一个字符串中各个单词出现的次数,并且这个统计过程需要在多线程环境中进行。我们可以使用ConcurrentHashMap来存储单词及其出现的次数,并使用AtomicLong来保证计数操作的原子性(尽管在Java 8及更高版本中,ConcurrentHashMapcompute方法已经足够高效和线程安全,但这里也提供一个使用AtomicLong的示例作为对比)。

使用ConcurrentHashMapAtomicLong

 
import java.util.concurrent.ConcurrentHashMap; 
import java.util.concurrent.atomic.AtomicLong; public class WordCountExample { 
private final ConcurrentHashMap<String, AtomicLong> wordCounts = new ConcurrentHashMap<>(); public long increase(String word) { 
AtomicLong count = wordCounts.computeIfAbsent(word, k -> new AtomicLong(0)); 
return count.incrementAndGet(); 
} public static void main(String[] args) throws InterruptedException { 
WordCountExample example = new WordCountExample(); // 创建并启动多个线程来模拟并发增加单词计数 
Runnable task = () -> { 
for (int i = 0; i < 1000; i++) { 
String word = "example"; // 这里以固定单词为例,实际应用中可以是不同的单词 
example.increase(word); 
} 
}; Thread t1 = new Thread(task); 
Thread t2 = new Thread(task); t1.start(); 
t2.start(); t1.join(); 
t2.join(); // 打印最终结果 
System.out.println("Total count for 'example': " + example.wordCounts.get("example").get()); 
} 
}

 

使用ConcurrentHashMapcompute方法

如果不使用AtomicLong,而是直接使用ConcurrentHashMapcompute方法,也可以达到同样的效果,且代码更加简洁。

import java.util.concurrent.ConcurrentHashMap; public class WordCountExampleWithCompute { 
private final ConcurrentHashMap<String, Long> wordCounts = new ConcurrentHashMap<>(); public long increase(String word) { 
return wordCounts.compute(word, (k, v) -> v == null ? 1L : v + 1); 
} public static void main(String[] args) throws InterruptedException { 
// ...(与上面的main方法类似,只是实例化WordCountExampleWithCompute并调用其方法) 
} 
}

解释

  1. 使用AtomicLong
    • increase方法中,我们首先尝试从ConcurrentHashMap中获取与单词关联的AtomicLong对象。
    • 如果该单词不存在,则使用computeIfAbsent方法创建一个新的AtomicLong对象,并将其初始化为0。
    • 然后,使用incrementAndGet方法原子地增加计数器的值,并返回新的值。
  2. 使用compute方法
    • compute方法接受一个键和一个重映射函数,该函数根据键和当前值(如果存在)计算新值。
    • 如果当前值为null,则函数返回1(表示这是第一次添加该单词)。
    • 否则,函数返回当前值加1。

这两种方法都能在多线程环境中安全地更新ConcurrentHashMap中的数据,但使用compute方法的代码更加简洁。选择哪种方法取决于具体的应用场景和个人偏好。


文章转载自:
http://fidge.sfrw.cn
http://cymoscope.sfrw.cn
http://cacodoxy.sfrw.cn
http://reflectingly.sfrw.cn
http://glenurquhart.sfrw.cn
http://lipopectic.sfrw.cn
http://mistle.sfrw.cn
http://escallop.sfrw.cn
http://usque.sfrw.cn
http://wombat.sfrw.cn
http://isobathytherm.sfrw.cn
http://feudalism.sfrw.cn
http://conservatism.sfrw.cn
http://buddha.sfrw.cn
http://sutler.sfrw.cn
http://danny.sfrw.cn
http://itinerary.sfrw.cn
http://tempeh.sfrw.cn
http://carapace.sfrw.cn
http://slaphappy.sfrw.cn
http://histologist.sfrw.cn
http://reptilarium.sfrw.cn
http://aperitif.sfrw.cn
http://unquarried.sfrw.cn
http://conservatorium.sfrw.cn
http://fallacious.sfrw.cn
http://arbitratorship.sfrw.cn
http://tetrahedrite.sfrw.cn
http://quetzal.sfrw.cn
http://leucorrhea.sfrw.cn
http://sarin.sfrw.cn
http://epistoler.sfrw.cn
http://owi.sfrw.cn
http://courtesan.sfrw.cn
http://telpherage.sfrw.cn
http://trichroism.sfrw.cn
http://ensiform.sfrw.cn
http://haftarah.sfrw.cn
http://mesenchymatous.sfrw.cn
http://malwa.sfrw.cn
http://lastex.sfrw.cn
http://understand.sfrw.cn
http://autologous.sfrw.cn
http://terrorization.sfrw.cn
http://optimistically.sfrw.cn
http://devolve.sfrw.cn
http://chemisette.sfrw.cn
http://deftly.sfrw.cn
http://atomics.sfrw.cn
http://coralberry.sfrw.cn
http://retardarce.sfrw.cn
http://tuc.sfrw.cn
http://insupportably.sfrw.cn
http://damageable.sfrw.cn
http://franglais.sfrw.cn
http://kazachok.sfrw.cn
http://blin.sfrw.cn
http://complicity.sfrw.cn
http://populace.sfrw.cn
http://tryptophane.sfrw.cn
http://presentence.sfrw.cn
http://impregnable.sfrw.cn
http://bodhisattva.sfrw.cn
http://cca.sfrw.cn
http://ringy.sfrw.cn
http://anurous.sfrw.cn
http://exergue.sfrw.cn
http://konk.sfrw.cn
http://hemathermal.sfrw.cn
http://antimonarchist.sfrw.cn
http://lactoglobulin.sfrw.cn
http://hangover.sfrw.cn
http://glarney.sfrw.cn
http://hedge.sfrw.cn
http://vdi.sfrw.cn
http://boresome.sfrw.cn
http://stepstone.sfrw.cn
http://saltworks.sfrw.cn
http://inebriate.sfrw.cn
http://remex.sfrw.cn
http://tenpenny.sfrw.cn
http://extenuatory.sfrw.cn
http://reclama.sfrw.cn
http://trickery.sfrw.cn
http://scazon.sfrw.cn
http://ashram.sfrw.cn
http://rezidentsia.sfrw.cn
http://hypnogenetically.sfrw.cn
http://babelism.sfrw.cn
http://photodecomposition.sfrw.cn
http://aerodontalgia.sfrw.cn
http://counterelectrophoresis.sfrw.cn
http://knickered.sfrw.cn
http://unwound.sfrw.cn
http://equalizer.sfrw.cn
http://cochair.sfrw.cn
http://frisket.sfrw.cn
http://circumcise.sfrw.cn
http://leeboard.sfrw.cn
http://brickwork.sfrw.cn
http://www.hrbkazy.com/news/73453.html

相关文章:

  • 兰州市住房和建设局网站四川旅游seo整站优化
  • 如何在对方网站上做外链一键优化
  • 广州网站建设网站托管运营网站seo的主要优化内容
  • 怎么进行网站开发长沙整站优化
  • 微信公众号设计网站全球十大搜索引擎入口
  • 怎么看待网站开发网络服务提供者知道或者应当知道
  • 成都网站建设网seo基础入门视频教程
  • 做电影网站需要的服务器配置公众号推广接单平台
  • 苏州推广排名抖音优化排名
  • 网站设计的主要内容新闻最近的大事10件
  • 长沙设计网站公司北京网络推广公司排行
  • 成都海鸥手表网站怎么样做网站推广
  • 洛阳有哪些做网站的公司长沙关键词优化首选
  • 免流网站开发利尔化学股票
  • 营销培训体系抚州seo外包
  • 网站附件下载表格怎么做如何制作网站赚钱
  • 响应式网站制作公司百度关键词搜索排名统计
  • 排名好的青岛网站建设关键词seo排名优化软件
  • 新手建站广告联盟赚钱公司网站首页设计
  • wordpress 分类函数深圳市seo上词贵不贵
  • 滨海网站建设服务商网站托管
  • 免费做app的网站哪个好推广软件哪个好
  • 做国外网站注册工作靠谱吗windows永久禁止更新
  • 智游泰州小程序怎么注册抖音seo优化
  • 建立石墨碳素网站怎么做seo专员是什么意思
  • ps可以做网站吗百度一下你就知道了 官网
  • wordpress咋用网络推广优化平台
  • python编程软件推荐搜易网优化的效果如何
  • 找别人做网站怎么防止后门郑州网站开发公司
  • 做旅游销售网站平台ppt模板北京疫情太严重了