Concurrenthashmap - - Principes

C'est une lame tranchante. 2021-09-15 09:20:34
concurrenthashmap principes


Site Web du texte original:ConcurrentHashMap--Principes\_ITUn blog à lame tranchante-CSDNBlogs

Autres URL

ConcurrentHashMapAnalyse du code source JDK8\_Le blog de Shen shijun-CSDNBlogs
DétailsConcurrentHashMapEtJDK8Optimisation de\_Le blog de l'Ingénieur de cuisine Xiao Hui-CSDNBlogs
ConcurrentHashMapAnalyse des sources(JDK8Version)\_ Que rien ne se passe -CSDNBlogs

Hashmap1.7Et1.8La différence+ConcurrentHashmap1.7Et1.8La différence\_hellodakeBlog de-CSDNBlogs

Introduction

JDK7AvecJDK8La différence

> <table align="center"><tbody><tr><td><p>Item (s)</p></td><td><p>JDK1.7</p></td><td><p>JDK1.8</p></td></tr><tr><td><p>Mécanismes</p></td><td><p>ReentrantLock+Segment+HashEntry( Tableau plus liste liée )</p></td><td><p>synchronized+CAS+HashEntry( Tableau plus liste liée )+Arbre Rouge et noir</p><p>Lire l'opération:volatile;Écrire l'opération:synchronized+CAS</p></td></tr><tr><td><p>Granulométrie</p></td><td><p> Pour les opérations de données requises SegmentVerrouillage</p></td><td><p> Pour chaque baril (Éléments du tableau)Verrouillage</p></td></tr></tbody></table>

JDK7

        InJDK1.7MoyenneConcurrentHashMapAdoptéReentrantLock+Segment+HashEntry( Tableau plus liste liée )De la manière dont.

        ConcurrentHashMap La serrure de section est appelée Segment,C'est similaire àHashMapStructure de,C'est - à - dire:: Il y a un EntryTableau, Chaque élément du tableau est une autre liste liée , En même temps, c'est un autre ReentrantLock(SegmentHéritéReentrantLock).

        ConcurrentHashMap Utilisation de la technologie de verrouillage segmenté , Stockage des données en segments ,Ensuite, chaque section de données est équipée d'une serrure,Quand un thread utilise un verrou pour accéder à l'un des segments de données,Les données d'autres segments sont également accessibles par d'autres Threads, Capable d'obtenir un accès simultané réel . 

ConcurrentHashMap Structure interne de

ConcurrentHashMap Structure interne de

putProcessus

  1. C'est exact.keyEn coursNo1Une foishash,AdoptionhashDétermination de la valeurSegmentEmplacement
  2. InSegment Fonctionnement interne ,Obtenir la serrure
  3. Obtenir le courantSegmentDeHashEntry Après le tableau keyEn coursNo2Une foishash,Adoptionhash La valeur est déterminée à HashEntry Emplacement de l'index du tableau (Tête)
  4. Par héritageReentrantLockDetryLockMéthode pour essayer d'obtenir la serrure,Si l'acquisition est réussie, insérez directement l'emplacement approprié,Si vous avez déjà un thread pourSegmentVerrouillage,L'appel que le fil courant va continuer à tournertryLockMéthode pour obtenir la serrure,Suspendre après le nombre spécifié de fois,Attendez de vous réveiller
  5. Ensuite, pour l'index actuel HashEntry La chaîne traverse , S'il y a des répétitions key, Remplacer ; S'il n'y a pas de répétition , Insérer dans la tête de chaîne
  6. Relâchez la serrure. 

getFonctionnement

EtputFonctionnement similaire, Deux fois aussi hash.MaisgetFonctionnementConcurrenthashmapPas besoin de verrouillage, Parce que les éléments de stockage sont marqués volatile. 

sizeFonctionnement

        size L'opération consiste à traverser tous les Segments, Chaque enregistrement SegmentDemodCountValeur, Et puis deux fois modCountComparer

  • Si c'est pareil, Indique qu'aucune écriture n'a eu lieu pendant , Renvoie le résultat de la traversée originale .
  • S'il est jugé qu'il y a eu deux statistiques modCountPas d'accord., Tout. Segment Verrouiller pour count Accès et statistiques . Chaque Segement Tout est verrouillé , Impossible d'effectuer d'autres opérations , Les statistiques count Naturellement, c'est exact .

Avantages et inconvénients de cette structure

Avantages

  1. Les opérations d'écriture ne peuvent être effectuées que sur l'élément Segment Il suffit de verrouiller ,N'affecte pas les autresSegment.

Inconvénients

  1. Hash Plus que d'habitude. HashMapPlus longtemps.

JDK8

Généralités

        JDK8MoyenneConcurrentHashMap La structure est essentiellement HashMapC'est pareil,Adopté(synchronized+CAS+HashEntry( Tableau plus liste liée )+Arbre Rouge et noir) De la façon dont nous concevons . Lire l'opération utiliser CAS, Les opérations d'écriture utilisent synchronized.

        JDK8 Zhong a complètement abandonné Segment A la place Node, Son idée de conception n'est plus JDK1.7 L'idée d'une serrure segmentée dans .

        Node:Enregistrerkey,valueEtkeyDehash Structure des données de la valeur .Parmi euxvalueEtnextTout.volatileModification, Garantir la visibilité de la concurrence .

class Node<K,V>implements Map.Entry<K,V>
{final int hash;final K key;volatile V val;volatile Node<K,V> next;//... Omettre certains codes}

        InJDK8MoyenneConcurrentHashMapStructure de, Grâce à l'introduction de l'arbre Rouge et noir ,De faireConcurrentHashMap La mise en œuvre de ,Nous le savons tous., Red Black Tree est un arbre de recherche binaire très performant , Sa performance de recherche est O(logN), Mais sa mise en œuvre est aussi très compliquée , Et la lisibilité est très mauvaise ,DougLea La capacité de penser n'est vraiment pas comparable à la moyenne , Lorsque la structure de la liste de liens a été complètement adoptée au début Map La complexité du temps de recherche est O(N),JDK8MoyenneConcurrentHashMap La longueur de la liste est supérieure à un certain seuil (8) Convertit la liste liée en arbre Rouge et noir pour améliorer encore ses performances de recherche .

sizeMéthodes

ConcurrentHashMap Comment déterminer la taille du tableau ?

JDK8

Initialisation

put

        UtiliserCASFonctionnement,........

        Le thread accède à la table de hachage bucketHeure,Utiliser sychronizededMots clés, Empêche plusieurs Threads d'utiliser le même bucket( C'est - à - dire verrouillé bucket). Si ce noeud hash La valeur n'est pas inférieure à 0, Traversez le noeud de mise à jour de la liste liée ou insérez un nouveau noeud ; Si le noeud est TreeBinNoeud de type, La description est la structure de l'arbre Rouge et noir ,ParputTreeVal Méthode insérer un noeud dans l'arbre Rouge et noir ; Nombre de noeuds mis à jour , Pensez également à l'expansion de la capacité et à l'arbre Rouge et noir lié .

final V putVal(K key, V value, boolean onlyIfAbsent) {
if (key == null || value == null) throw new NullPointerException();
int hash = spread(key.hashCode());
for (Node<K,V>[] tab = table;;) {
Node<K,V> f; int n, i, fh;
if (tab == null || (n = tab.length) == 0)
else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {
if (casTabAt(tab, i, null,
new Node<K,V>(hash, key, value, null)))
break; // no lock when adding to empty bin
else if ((fh = f.hash) == MOVED)
tab = helpTransfer(tab, f);
if (binCount >= TREEIFY_THRESHOLD)

get

get Le fonctionnement peut être sans verrouillage (Non verrouillé)Parce que Node Élément Deval Pointeur Et nextPointeur AvecvolatileDécoré,Dans un environnement multithreadé,ThreadA Modifier le noeud val Ou quand vous ajoutez un noeud ,Au filBSont visibles.

size

版权声明
本文为[C'est une lame tranchante.]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210915091722222A.html

  1. 快速从 Windows 切换到 Linux 环境
  2. 五分钟向MySql数据库插入一千万条数据
  3. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法
  4. 用Java实现红黑树
  5. 使用Redis Stream来做消息队列和在Asp.Net Core中的实现
  6. 海量列式非关系数据库HBase 架构,shell与API
  7. Architecture, Shell et API de base de données non relationnelle à grande échelle
  8. Mise en œuvre de l'arbre Rouge et noir en Java
  9. Java Date Time API Series 42 - - a efficient Chinese Date Format and Analysis Method
  10. 5 minutes pour insérer 10 millions de données dans la base de données MySQL
  11. Passage rapide de Windows à l'environnement Linux
  12. Notes on Java backend development of PostgreSQL (I)
  13. 海量列式非關系數據庫HBase 架構,shell與API
  14. Byte Jump the latest open source, the most Classic hashtap Graph details,
  15. L'interview Java de Byte Hopping Society, l'analyse super populaire de l'utilisation et du code source de countdownlatch,
  16. "Anti Mafia storm" Wang Zhifei's love history is really wonderful: he divorced Zhang Xinyi and married a 14-year-old wife
  17. In spring in the jade mansion, Jia Fengyuan was not moved by his brother's death. Why was su Yingxue changed? The reason is realistic
  18. Adam Oracle Oracle fully constructs Adam token incentive for ecological development
  19. 实战SpringCloud通用请求字段拦截处理,超过500人面试阿里,
  20. 宅家36天咸鱼翻身入职腾讯,Zookeeper一致性级别分析,
  21. The first starcoin & move hacksong source code analysis - P (a)
  22. Zhaijia 36 days Salt Fish turn into Tencent, Zookeeper Consistency level analysis,
  23. Traitement de l'interception des champs de demande communs de Spring Cloud, plus de 500 personnes interviewent Ali,
  24. About JavaScript modules
  25. Object oriented programming (2)
  26. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法
  27. Java日期時間API系列42-----一種高效的中文日期格式化和解析方法
  28. 宅家36天鹹魚翻身入職騰訊,Zookeeper一致性級別分析,
  29. Java Date Time API Series 42 - - a efficient Chinese Date Format and Analysis Method
  30. 已成功拿下字节、腾讯、脉脉offer,7年老Java一次操蛋的面试经历,
  31. 小米Java社招面试,每次面试必问的二叉树的设计与编码,
  32. 小米Java校招面试,阿里、百度、美团、携程、蚂蚁面经分享,
  33. 小米Java校招面試,阿裏、百度、美團、攜程、螞蟻面經分享,
  34. Xiaomi Java School Recruitment interview, Ali, baidu, meituan, ctrip, ant Facebook Sharing,
  35. La conception et le codage de l'arbre binaire requis pour chaque entrevue d'embauche de la société Java millet;
  36. A remporté avec succès Byte, Tencent, Pulse offer, 7 ans Java une expérience d'entrevue de baise,
  37. 干货来袭,Java岗面试12家大厂成功跳槽,
  38. 常用Java框架面试题目,现在做Java开发有前途吗?
  39. 常用Java框架面試題目,現在做Java開發有前途嗎?
  40. Les questions d'entrevue couramment utilisées pour le cadre Java sont - elles prometteuses pour le développement Java?
  41. L'arrivée de marchandises sèches, l'entretien d'emploi Java 12 grandes usines ont réussi à changer d'emploi,
  42. Multiple postures for handling container time in k8s environment
  43. Echarts remove left Gap, Blank
  44. Hotspot Weekly | zoom $100 million, docker fees, $38 billion Data bricks
  45. JsonMappingException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory...
  46. Java. Security. Securerandom source code analysis Java. Security. EGD = file: / dev /. / urandom
  47. When using IntelliJ idea, jump directly and quickly from the mapper interface to mapper.xml
  48. When idea writes SQL in mybatis XML, the solution to the problems of table name, field and red reporting
  49. Spring cloud integrates Nacos
  50. 应届毕业生Java笔试题目,2021大厂Java社招最全面试题,
  51. Liver explosion! Take you to understand Hadoop serialization
  52. linux系列之:告诉他,他根本不懂kill
  53. java版gRPC实战之三:服务端流
  54. RabbitMQ核心知识总结!
  55. linux系列之:告诉他,他根本不懂kill
  56. java版gRPC实战之三:服务端流
  57. RabbitMQ核心知识总结!
  58. 10天拿到字节跳动Java岗位offer,学习Java开发的步骤
  59. 10天拿到字节跳动Java岗位offer,Java知识点思维导图
  60. Résumé des connaissances de base de rabbitmq!