¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³ | »áÔ±ÖÐÐÄ | ÎÒҪͶ¸å Àî´óͬ £¨https://www.lidatong.com.cn/£©- ¿Æ¼¼¡¢½¨Õ¾¡¢¾­Ñé¡¢ÔÆ¼ÆËã¡¢5G¡¢´óÊý¾Ý,Õ¾³¤Íø!
µ±Ç°Î»Ö㺠Ê×Ò³ > ±à³Ì¿ª·¢ > Java > ÕýÎÄ

ConcurrentHashMap 1.8ΪʲôҪʹÓÃCAS+SynchronizedÈ¡´úSegment

·¢²¼Ê±¼ä£º2020-12-15 07:51:46 ËùÊôÀ¸Ä¿£ºJava À´Ô´£ºÍøÂçÕûÀí
µ¼¶Á£º? ´ó¼ÒÓ¦¸Ã¶¼ÖªµÀConcurrentHashMapÔÚ1.8µÄʱºòÓÐÁ˺ܴóµÄ¸Ä¶¯,µ±È»,ÎÒÕâÀïҪ˵µÄ¸Ä¶¯²»ÊÇÖ¸Á´±í³¤¶È´óÓÚ8¾ÍתΪºìºÚÊ÷ÕâÖÖ³£Ê¶,ÎÒҪ˵µÄÊÇConcurrentHashMapÔÚ1.8ΪʲôÓÃCAS+SynchronizedÈ¡´úSegment+ReentrantLockÁË Ê×ÏÈ,ÎÒ¼ÙÉèÄã¶ÔCAS,Synchronized,Ree

?

´ó¼ÒÓ¦¸Ã¶¼ÖªµÀConcurrentHashMapÔÚ1.8µÄʱºòÓÐÁ˺ܴóµÄ¸Ä¶¯,µ±È»,ÎÒÕâÀïҪ˵µÄ¸Ä¶¯²»ÊÇÖ¸Á´±í³¤¶È´óÓÚ8¾ÍתΪºìºÚÊ÷ÕâÖÖ³£Ê¶,ÎÒҪ˵µÄÊÇConcurrentHashMapÔÚ1.8ΪʲôÓÃCAS+SynchronizedÈ¡´úSegment+ReentrantLockÁË

Ê×ÏÈ,ÎÒ¼ÙÉèÄã¶ÔCAS,Synchronized,ReentrantLockÕâЩ֪ʶºÜÁ˽â,²¢ÇÒÖªµÀAQS,×ÔÐýËø,Æ«ÏòËø,ÇáÁ¿¼¶Ëø,ÖØÁ¿¼¶ËøÕâЩ֪ʶ,Ò²ÖªµÀSynchronizedºÍReentrantLockÔÚ»½Ðѱ»¹ÒÆðÏ߳̾ºÕùµÄʱºòÓÐÊ²Ã´Çø±ð

Ê×ÏÈÎÒÃÇ˵ÏÂ1.8ÒÔǰµÄConcurrentHashMapÊÇÔõô±£Ö¤Ï̲߳¢·¢µÄ,Ê×ÏÈÔÚ³õʼ»¯ConcurrentHashMapµÄʱºò,»á³õʼ»¯Ò»¸öSegmentÊý×é,ÈÝÁ¿Îª16,¶øÃ¿¸öSegmentÄØ,¶¼¼Ì³ÐÁËReentrantLockÀà,Ò²¾ÍÊÇ˵ÿ¸öSegmentÀà±¾Éí¾ÍÊÇÒ»¸öËø,Ö®ºóSegmentÄÚ²¿ÓÖÓÐÒ»¸ötableÊý×é,¶øÃ¿¸ötableÊý×éÀïµÄË÷ÒýÊý¾ÝÄØ,ÓÖ¶ÔÓ¦×ÅÒ»¸öNodeÁ´±í.

ÄÇôÕâÑùµÄºÃ´¦ÊÇÊ²Ã´ÄØ?ÎÒÏÈ´ÓÀϰ汾µÄÌí¼ÓÁ÷³Ì˵Æð°É,ÓÉÓÚµçÄÔÀïûÓÐJDK1.7¼°ÒÔϵİ汾ÎÒû·¨¸øÄã¿´´úÂë,ËùÒÔʹÓÃÎÄ×ÖÃèÊöµÄ·½Ê½,Ê×ÏÈ,µ±ÎÒÃÇʹÓÃput·½·¨µÄʱºò,ÊǶÔÎÒÃǵÄkey½øÐÐhashÄõ½Ò»¸öÕûÐÍ,È»ºó½«ÕûÐͶÔ16ȡģ,Äõ½¶ÔÓ¦µÄSegment,Ö®ºóµ÷ÓÃSegmentµÄput·½·¨,È»ºóÉÏËø,Çë×¢Òâ,ÕâÀïlock()µÄʱºòÆäʵÊÇthis.lock(),Ò²¾ÍÊÇ˵,ÿ¸öSegmentµÄËøÊÇ·Ö¿ªµÄ

ÆäÖÐÒ»¸öÉÏËø²»»áÓ°ÏìÁíÒ»¸ö,´ËʱҲ¾Í´ú±íÁËÎÒ¿ÉÒÔÓÐÊ®Áù¸öÏ߳̽øÀ´,¶øReentrantLockÉÏËøµÄʱºòÈç¹ûÖ»ÓÐÒ»¸öÏ߳̽øÀ´,ÊDz»»áÓÐÏß³Ì¹ÒÆðµÄ²Ù×÷µÄ,Ò²¾ÍÊÇ˵ֻÐèÒªÔÚAQSÀïʹÓÃCAS¸Ä±äÒ»¸östateµÄֵΪ1,´Ëʱ¾ÍÄܶԴúÂë½øÐвÙ×÷,ÕâÑùÒ»À´,ÎÒÃǵÈÓÚ½«²¢·¢Á¿/16ÁË.

ºÃ,˵ÍêÁËÀϰ汾µÄConcurrentHashMap,ÎÒÃÇÔÙ˵˵а汾µÄ,Çë¿´ÏÂÃæµÄͼ:

Çë×¢ÒâSynchronizedÉÏËøµÄ¶ÔÏó,Çë¼Çס,SynchronizedÊÇ¿¿¶ÔÏóµÄ¶ÔÏóÍ·ºÍ´Ë¶ÔÏó¶ÔÓ¦µÄmonitorÀ´±£Ö¤ÉÏËøµÄ,Ò²¾ÍÊǶÔÏóÍ·ÀïµÄÖØÁ¿¼¶Ëø±êÖ¾Ö¸ÏòÁËmonitor,¶ømonitorÄØ,ÄÚ²¿Ôò±£´æÁËÒ»¸öµ±Ç°Ïß³Ì,Ò²¾ÍÊÇÇÀµ½ÁËËøµÄÏß³Ì.

ÄÇôÕâÀïµÄÕâ¸öfÊÇÊ²Ã´ÄØ?ËüÊÇNodeÁ´±íÀïµÄÿһ¸öNode,SynchronizedÊǽ«Ã¿Ò»¸öNode¶ÔÏó×÷ΪÁËÒ»¸öËø,ÕâÑù×öµÄºÃ´¦ÊÇÊ²Ã´ÄØ?½«ËøÏ¸»¯ÁË,³ý·ÇÁ½¸öÏß³Ìͬʱ²Ù×÷Ò»¸öNode,×¢Òâ,ÊÇÒ»¸öNode¶ø²»ÊÇÒ»¸öNodeÁ´±íŶ,ÄÇô²Å»áÕùÇÀͬһ°ÑËø.

Èç¹ûʹÓÃReentrantLockÆäʵҲ¿ÉÒÔ½«ËøÏ¸»¯³ÉÕâÑùµÄ,Ö»ÒªÈÃNodeÀà¼Ì³ÐReentrantLock¾ÍÐÐÁË,ÕâÑùµÄ»°µ÷ÓÃf.lock()¾ÍÄÜ×öµ½ºÍSynchronized(f)ͬÑùµÄЧ¹û,µ«ÎªÊ²Ã´²»ÕâÑù×öÄØ?

Çë´ó¼ÒÊÔÏëÒ»ÏÂ,ËøÒѾ­±»Ï¸»¯µ½ÕâÖ̶ֳÈÁË,ÄÇô³öÏÖ²¢·¢ÕùÇÀµÄ¿ÉÄÜÐÔ»¹¸ßÂð?»¹ÓоÍÊÇ,ÄÄųöÏÖÕùÇÀÁË,Ö»ÒªÏ߳̿ÉÒÔÔÚ30µ½50´Î×ÔÐýÀïÄõ½Ëø,ÄÇôSynchronized¾Í²»»áÉý¼¶ÎªÖØÁ¿¼¶Ëø,¶øµÈ´ýµÄÏß³ÌÒ²¾Í²»Óñ»¹ÒÆð,ÎÒÃÇÒ²¾ÍÉÙÁË¹ÒÆðºÍ»½ÐÑÕâ¸öÉÏÏÂÎÄÇл»µÄ¹ý³Ì¿ªÏú.

µ«Èç¹ûÊÇReentrantLockÄØ?ËüÔòÖ»ÓÐÔÚÏß³ÌûÓÐÇÀµ½Ëø,È»ºóн¨Node½ÚµãºóÔÙ³¢ÊÔÒ»´Î¶øÒÑ,²»»á×ÔÐý,¶øÊÇÖ±½Ó±»¹ÒÆð,ÎÒÃǾͺÜÈÝÒ×»á¶à³öÏß³ÌÉÏÏÂÎÄ¿ªÏúµÄ´ú¼Û.µ±È»,ÄãÒ²¿ÉÒÔʹÓÃtryLock(),µ«ÊÇÕâÑùÓÖ³öÏÖÁËÒ»¸öÎÊÌâ,ÄãÔõô֪µÀtryLockµÄʱ¼äÄØ?ÔÚʱ¼ä·¶Î§ÀﻹºÃ,¼ÙÈ糬¹ýÁËÄØ?

ËùÒÔ,ÔÚËø±»Ï¸»¯µ½Èç´Ë³Ì¶ÈÉÏ,ʹÓÃSynchronizedÊÇ×îºÃµÄÑ¡ÔñÁË.ÕâÀïÔÙ²¹³äÒ»¾ä,SynchronizedºÍReentrantLockËûÃǵĿªÏú²î¾àÊÇÔÚÊÍ·ÅËøÊ±»½ÐÑÏ̵߳ÄÊýÁ¿,SynchronizedÊÇ»½ÐÑËø³ØÀïËùÓеÄÏß³Ì+¸ÕºÃÀ´·ÃÎʵÄÏß³Ì,¶øReentrantLockÔòÊǵ±Ç°Ï̺߳ó½øÀ´µÄµÚÒ»¸öÏß³Ì+¸ÕºÃÀ´·ÃÎʵÄÏß³Ì.

Èç¹ûÊÇÏ̲߳¢·¢Á¿²»´óµÄÇé¿öÏÂ,ÄÇôSynchronizedÒòΪ×ÔÐýËø,ÇáÁ¿¼¶ËøµÄÔ­Òò,²»Óý«µÈ´ýÏß³Ì¹ÒÆð,Æ«ÏòËøÉõÖÁ²»ÓÃ×ÔÐý,ËùÒÔÔÚÕâÖÖÇé¿öÏÂÒª±ÈReentrantLock¸ßЧ

£¨±à¼­£ºÀî´óͬ£©

¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ!

    ÍÆ¼öÎÄÕÂ
      ÈȵãÔĶÁ