ͻ񻣼
volativeµÄÓ¦Óà volatileµÄ¶¨ÒåÓëʵÏÖÔÀí synchronizedµÄʵÏÖÔÀíºÍÓ¦Óà java¶ÔÏóÍ·
ËøÉý¼¶ Æ«ÏòËø Æ«ÏòËøµÄ³·Ïú ¹Ø±ÕÆ«ÏòËø ÇáÁ¿Ëø ÇáÁ¿Ëø¼ÓËø ÇáÁ¿Ëø½âËø ËøµÄÓÅȱµã¶Ô±È Ô×Ó²Ù×÷µÄʵÏÖÔÀí
ÊõÓﶨÒå ´¦ÀíÆ÷ʵÏÖÔ×Ó²Ù×÷ ʹÓÃ×ÜÏßËø±£Ö¤Ô×ÓÐÔ Ê¹Óûº´æËø±£Ö¤Ô×ÓÐÔ javaÈçºÎʵÏÖÔ×Ó²Ù×÷
volativeµÄÓ¦ÓÃ
volatileµÄ¶¨ÒåÓëʵÏÖÔÀí
Java±à³ÌÓïÑÔÔÊÐíÏ̷߳ÃÎʹ²Ïí±äÁ¿£¬ÎªÁËÈ·±£¹²Ïí±äÁ¿Äܱ»×¼È·ºÍÒ»ÖµظüУ¬Ïß³ÌÓ¦¸ÃÈ·±£Í¨¹ýÅÅËûËøµ¥¶À»ñµÃÕâ¸ö±äÁ¿¡£JavaÓïÑÔÌṩÁËvolatile£¬ÔÚijЩÇé¿öϱÈËøÒª¸ü¼Ó·½±ã¡£Èç¹ûÒ»¸ö×ֶα»ÉùÃ÷³Évolatile£¬JavaÏß³ÌÄÚ´æÄ£ÐÍÈ·±£ËùÓÐÏ߳̿´µ½Õâ¸ö±äÁ¿µÄÖµÊÇÒ»Öµġ£

ÓÐvolatile±äÁ¿ÐÞÊεĹ²Ïí±äÁ¿½øÐÐд²Ù×÷µÄʱºò»á¶à³öһЩ»ã±à´úÂ룬¼ÓÈëLockǰ׺¡£Lockǰ׺µÄÖ¸ÁîÔÚ¶àºË´¦ÀíÆ÷»áÒý·¢Á½¼þÊÂÇé
1. ½«µ±Ç°´¦ÀíÆ÷»º´æÐеÄÊý¾Ýд»Øµ½ÏµÍ³ÄÚ´æ
2. Õâ¸öд»ØÄÚ´æµÄ²Ù×÷»áʹÔÚÆäËûcpuÀﻺ´æÁ˸ÃÄÚ´æµØÖ·µÄÊý¾ÝÎÞЧ¡£
ÔÚ¶à´¦ÀíÆ÷Ï£¬ÎªÁ˱£Ö¤¸÷¸ö´¦ÀíÆ÷µÄ»º´æÊÇÒ»Öµģ¬»áʵÏÖ»º´æÒ»ÖÂÐÔÐÒ飬ÿ¸ö´¦ÀíÆ÷ͨ¹ýÐá̽ÔÚ×ÜÏßÉÏ´«²¥µÄÊý¾ÝÀ´¼ì²é×Ô¼º»º´æµÄÖµÊDz»ÊǹýÆÚÁË£¬µ±´¦ÀíÆ÷·¢ÏÖ×Ô¼º»º´æÐжÔÓ¦µÄÄÚ´æµØÖ·±»Ð޸ģ¬¾Í»á½«µ±Ç°´¦ÀíÆ÷µÄ»º´æÐÐÉèÖóÉÎÞЧ״̬£¬µ±´¦ÀíÆ÷¶ÔÕâ¸öÊý¾Ý½øÐÐÐ޸IJÙ×÷µÄʱºò£¬»áÖØÐ´ÓϵͳÄÚ´æÖаÑÊý¾Ý¶Áµ½´¦ÀíÆ÷»º´æÀï¡£
volatileµÄÁ½ÌõʵÏÖÔÔò
1. Lockǰ׺ָÁî»áÒýÆð´¦ÀíÆ÷»º´æ»ØÐ´µ½ÄÚ´æ
2. Ò»¸ö´¦ÀíÆ÷µÄ»º´æ»ØÐ´µ½ÄÚ´æ»áµ¼ÖÂÆäËû´¦ÀíÆ÷µÄ»º´æÎÞЧ
synchronizedµÄʵÏÖÔÀíºÍÓ¦ÓÃ
JavaÖеÄÿһ¸ö¶ÔÏ󶼿ÉÒÔ×÷ÎªËø¡£¾ßÌå±íÏÖΪÒÔÏÂ3ÖÖÐÎʽ£º
1. ¶ÔÓÚÆÕͨͬ²½·½·¨£¬ËøÊǵ±Ç°ÊµÀý¶ÔÏó¡£
2. ¶ÔÓÚ¾²Ì¬Í¬²½·½·¨£¬ËøÊǵ±Ç°ÀàµÄClass¶ÔÏó¡£
3. ¶ÔÓÚͬ²½·½·¨¿é£¬ËøÊÇSynchonizedÀ¨ºÅÀïÅäÖõĶÔÏó¡£
JVM»ùÓÚ½øÈëºÍÍ˳öMonitor¶ÔÏóÀ´ÊµÏÖ·½·¨Í¬²½ºÍ´úÂë¿éͬ²½£¬µ«Á½ÕßµÄʵÏÖϸ½Ú²»Ò»Ñù¡£´úÂë¿éͬ²½ÊÇʹÓÃmonitorenterºÍmonitorexitÖ¸ÁîʵÏֵ쬶ø·½·¨Í¬²½ÊÇʹÓÃÁíÍâÒ»ÖÖ·½Ê½ÊµÏֵģ¬Ï¸½ÚÔÚJVM¹æ·¶ÀﲢûÓÐÏêϸ˵Ã÷¡£µ«ÊÇ£¬·½·¨µÄͬ²½Í¬Ñù¿ÉÒÔʹÓÃÕâÁ½¸öÖ¸ÁîÀ´ÊµÏÖ¡£
monitorenterÖ¸ÁîÊÇÔÚ±àÒëºó²åÈ뵽ͬ²½´úÂë¿éµÄ¿ªÊ¼Î»Ö㬶ømonitorexitÊDzåÈëµ½·½·¨½áÊø´¦ºÍÒì³£´¦£¬JVMÒª±£Ö¤Ã¿¸ömonitorenter±ØÐëÓжÔÓ¦µÄmonitorexitÓëÖ®Åä¶Ô¡£ÈκζÔÏó¶¼ÓÐÒ»¸ömonitorÓëÖ®¹ØÁª£¬µ±ÇÒÒ»¸ömonitor±»³ÖÓкó£¬Ëü½«´¦ÓÚËø¶¨×´Ì¬¡£Ïß³ÌÖ´Ðе½monitorenterÖ¸Áîʱ£¬½«»á³¢ÊÔ»ñÈ¡¶ÔÏóËù¶ÔÓ¦µÄmonitorµÄËùÓÐȨ£¬¼´³¢ÊÔ»ñµÃ¶ÔÏóµÄËø¡£
java¶ÔÏóÍ·
synchronizedÓõÄËøÊÇ´æÔÚJava¶ÔÏóÍ·ÀïµÄ¡£Èç¹û¶ÔÏóÊÇÊý×éÀàÐÍ£¬ÔòÐéÄâ»úÓÃ3¸ö×Ö¿í
£¨Word£©´æ´¢¶ÔÏóÍ·£¬Èç¹û¶ÔÏóÊÇ·ÇÊý×éÀàÐÍ£¬ÔòÓÃ2×Ö¿í´æ´¢¶ÔÏóÍ·¡£ÔÚ32λÐéÄâ»úÖУ¬1×Ö¿íµÈÓÚ4×Ö½Ú£¬¼´32bit

Java¶ÔÏóÍ·ÀïµÄMark WordÀïĬÈÏ´æ´¢¶ÔÏóµÄHashCode¡¢·Ö´úÄêÁäºÍËø±ê¼Çλ¡£32λJVM
µÄMark WordµÄĬÈÏ´æ´¢½á¹¹ÈçÏÂͼʾ
ÔÚÔËÐÐÆÚ¼ä£¬Mark WordÀï´æ´¢µÄÊý¾Ý»áËæ×ÅËø±ê־λµÄ±ä»¯¶ø±ä»¯¡£Mark Word¿ÉÄܱä
»¯Îª´æ´¢ÒÔÏÂ4ÖÖÊý¾Ý,ÈçÏÂͼʾ

ÔÚ64λÐéÄâ»úÏ£¬Mark WordÊÇ64bit´óСµÄ,ÈçÏÂͼʾ

ËøÉý¼¶
Java SE 1.6ÖУ¬ËøÒ»¹²ÓÐ4ÖÖ״̬£¬¼¶±ð´ÓµÍµ½¸ßÒÀ´ÎÊÇ£º
1. ÎÞËø×´Ì¬
2. Æ«ÏòËø×´Ì¬
3. ÇáÁ¿¼¶Ëø×´Ì¬
4. ÖØÁ¿¼¶Ëø×´Ì¬
Õ⼸¸ö״̬»áËæ×žºÕùÇé¿öÖð½¥Éý¼¶¡£
Æ«ÏòËø
´ó¶àÊýÇé¿öÏ£¬Ëø²»½ö²»´æÔÚ¶àÏ߳̾ºÕù£¬¶øÇÒ×ÜÊÇÓÉͬ
Ò»Ï̶߳à´Î»ñµÃ£¬ÎªÁËÈÃÏ̻߳ñµÃËøµÄ´ú¼Û¸üµÍ¶øÒýÈëÁËÆ«ÏòËø¡£µ±Ò»¸öÏ̷߳ÃÎÊͬ²½¿é²¢»ñÈ¡ËøÊ±£¬»áÔÚ¶ÔÏóÍ·ºÍÕ»Ö¡ÖеÄËø¼Ç¼Àï´æ´¢ËøÆ«ÏòµÄÏß³ÌID£¬ÒÔºó¸ÃÏß³ÌÔÚ½øÈëºÍÍ˳öͬ²½¿éʱ²»ÐèÒª½øÐÐCAS²Ù×÷À´¼ÓËøºÍ½âËø£¬Ö»Ðè¼òµ¥µØ²âÊÔһ϶ÔÏóÍ·µÄMark
WordÀïÊÇ·ñ´æ´¢×ÅÖ¸Ïòµ±Ç°Ïß³ÌµÄÆ«ÏòËø¡£
Æ«ÏòËøµÄ³·Ïú
Æ«ÏòËøÊ¹ÓÃÁËÒ»Öֵȵ½¾ºÕù³öÏÖ²ÅÊÍ·ÅËøµÄ»úÖÆ£¬ËùÒÔµ±ÆäËûÏ̳߳¢ÊÔ¾ºÕùÆ«ÏòËøÊ±£¬³ÖÓÐÆ«ÏòËøµÄÏ̲߳ŻáÊÍ·ÅËø¡£
µ±³öÏÖÆ«ÏòËø¾ºÕùµÄʱºò£¬°´Èçϲ½ÖèÖ´ÐÐ
1. ÔÝÍ£ÓµÓÐÆ«ÏòËøµÄÏß³Ì
2. ¼ì²é³ÖÓÐÆ«ÏòËøµÄÏß³ÌÊÇ·ñ»¹alive£¬Èô²»ÊÇ£¬Ôò½«¶ÔÏóÍ·ÉèÖÃΪÎÞËø×´Ì¬£¬·ñÔòÖ´ÐÐ3
3. Ïß³ÌÈÔÈ»»î×Å£¬Ö´ÐÐÆ«ÏòËøµÄÕ»£¬±éÀúÆ«Ïò¶ÔÏóµÄËø¼Ç¼£¬Õ»ÖеÄËø¼Ç¼ºÍ¶ÔÏóÍ·µÄMark WordÒªÃ´ÖØÐÂÆ«ÏòÓÚÆäËûỊ̈߳¬ÒªÃ´»Ø¸´µ½ÎÞËø»òÕß±ê¼Ç¶ÔÏó²»ÊʺÏ×÷ΪƫÏòËø
4. »½ÐÑÔÝÍ£µÄÏß³Ì

¹Ø±ÕÆ«ÏòËø
Æ«ÏòËøÔÚJava 6ºÍJava 7ÀïÊÇĬÈÏÆôÓõ쬵«ÊÇËüÔÚÓ¦ÓóÌÐòÆô¶¯¼¸ÃëÖÓÖ®ºó²Å¼¤»î£¬Èç
ÓбØÒª¿ÉÒÔʹÓÃJVM²ÎÊýÀ´¹Ø±ÕÑÓ³Ù£º
-XX:BiasedLockingStartupDelay=0 |
Èç¹ûÄãÈ·¶¨Ó¦ÓóÌÐòÀïËùÓеÄËøÍ¨³£Çé¿öÏ´¦ÓÚ¾ºÕù״̬£¬¿ÉÒÔͨ¹ýJVM²ÎÊý¹Ø±ÕÆ«ÏòËø£º
-XX:-UseBiasedLocking=false |
ÄÇô³ÌÐòĬÈÏ»á½øÈëÇáÁ¿¼¶Ëø×´Ì¬¡£
ÇáÁ¿Ëø
ÇáÁ¿Ëø¼ÓËø
Ïß³ÌÔÚÖ´ÐÐͬ²½¿é֮ǰ£¬JVM»áÏÈÔÚµ±Ç°Ï̵߳ÄÕ»èåÖд´½¨ÓÃÓÚ´æ´¢Ëø¼Ç¼µÄ¿Õ¼ä£¬²¢½«¶ÔÏóÍ·ÖеÄMark Word¸´ÖƵ½Ëø¼Ç¼ÖУ¬¹Ù·½³ÆÎªDisplaced
Mark Word¡£È»ºóÏ̳߳¢ÊÔʹÓÃCAS½«¶ÔÏóÍ·ÖеÄMark WordÌæ»»ÎªÖ¸ÏòËø¼Ç¼µÄÖ¸Õë¡£Èç¹û³É¹¦£¬µ±Ç°Ï̻߳ñµÃËø£¬Èç¹ûʧ
°Ü£¬±íʾÆäËûÏ߳̾ºÕùËø£¬µ±Ç°Ï̱߳㳢ÊÔʹÓÃ×ÔÐýÀ´»ñÈ¡Ëø¡£
displaced mark wordÊÇÕû¸öÇáÁ¿¼¶ËøÊµÏֵĹؼü£¬ÔÚCASÖеÄcompare¾ÍÐèÒªÓÃËü×÷ΪÌõ¼þ¡£ÔÚ¿½±´Íêobject
mark wordÖ®ºó£¬JVM×öÁËÒ»²½½»»»Ö¸ÕëµÄ²Ù×÷½«object mark wordÀïµÄÇáÁ¿¼¶ËøÖ¸ÕëÖ¸Ïòlock
recordËùÔÚµÄstackÖ¸Õ룬×÷ÓÃÊÇÈÃÆäËûÏß³ÌÖªµÀ£¬¸Ãobject monitorÒѱ»Õ¼Ó㨾ÍÏñÆ«ÏòËøÖÐÓÃCASµÄ·½Ê½½«mark
wordµÄidÖ¸Ïòµ±Ç°³¢ÊÔ»ñÈ¡ËøµÄÏß³Ìid£¬ÕâÀïÊǽ«mark wordÖеÄÇáÁ¿¼¶ËøÖ¸ÕëÒÔCASµÄ·½Ê½³¢ÊÔÖ¸Ïòµ±Ç°Ï̵߳Älock
record£¬ÕâÑù±ðµÄÏ̱߳ãÖªµÀµ±Ç°ÇáÁ¿ËøÒѾָÏò±ðµÄÏß³ÌÁË£©¡£lock recordÀïµÄownerÖ¸ÕëÖ¸Ïòobject
mark wordµÄ×÷ÓÃÊÇΪÁËÔÚ½ÓÏÂÀïµÄÔËÐйý³ÌÖУ¬Ê¶±ðÄĸö¶ÔÏó±»Ëø×¡ÁË¡£


ÇáÁ¿Ëø½âËø
ÇáÁ¿¼¶½âËøÊ±£¬»áʹÓÃÔ×ÓµÄCAS²Ù×÷½«Displaced Mark WordÌæ»»»Øµ½¶ÔÏóÍ·£¬Èç¹û³É
¹¦£¬Ôò±íʾûÓоºÕù·¢Éú¡£Èç¹ûʧ°Ü£¬±íʾµ±Ç°Ëø´æÔÚ¾ºÕù£¬Ëø¾Í»áÅòÕͳÉÖØÁ¿¼¶Ëø¡£
ÇáÁ¿ËøµÄÅòÕÍÁ÷³ÌÈçÏÂͼʾ  
ËùÒÔÓÉÇáÁ¿ËøÇл»µ½ÖØÁ¿Ëø£¬ÊÇ·¢ÉúÔÚÇáÁ¿ËøÊÍ·ÅËøµÄÆÚ¼ä£¬Ö®Ç°ÔÚ»ñÈ¡ËøµÄʱºòËü¿½±´ÁËËø¶ÔÏóÍ·µÄmark word£¬ÔÚÊÍ·ÅËøµÄʱºòÈç¹ûËü·¢ÏÖÔÚËü³ÖÓÐËøµÄÆÚ¼äÓÐÆäËûÏß³ÌÀ´³¢ÊÔ»ñÈ¡ËøÁË£¬²¢ÇÒ¸ÃÏ̶߳Ômark
word×öÁËÐ޸ģ¬Á½Õ߱ȶԷ¢ÏÖ²»Ò»Ö£¬ÔòÇл»µ½ÖØÁ¿Ëø¡£
ÒòÎªÖØÁ¿¼¶Ëø±»ÐÞ¸ÄÁË£¬ËùÓÐdisplay mark wordºÍÔÀ´µÄmark word²»Ò»ÑùÁË¡£
ÒòΪ×ÔÐý»áÏûºÄCPU£¬ÎªÁ˱ÜÃâÎÞÓõÄ×ÔÐý£¨±ÈÈç»ñµÃËøµÄÏ̱߳»×èÈûסÁË£©£¬Ò»µ©ËøÉý¼¶³ÉÖØÁ¿¼¶Ëø£¬¾Í²»»áÔÙ»Ö¸´µ½ÇáÁ¿¼¶Ëø×´Ì¬¡£
ËøµÄÓÅȱµã¶Ô±È

Ô×Ó²Ù×÷µÄʵÏÖÔÀí
ÊõÓﶨÒå

´¦ÀíÆ÷ʵÏÖÔ×Ó²Ù×÷
ʹÓÃ×ÜÏßËø±£Ö¤Ô×ÓÐÔ
Èç¹û¶à¸ö´¦ÀíÆ÷ͬʱ¶Ô¹²Ïí±äÁ¿½øÐжÁ¸Äд²Ù×÷
£¨i++¾ÍÊǾµäµÄ¶Á¸Äд²Ù×÷£©£¬ÄÇô¹²Ïí±äÁ¿¾Í»á±»¶à¸ö´¦ÀíÆ÷ͬʱ½øÐвÙ×÷£¬ÕâÑù¶Á¸Äд²Ù
×÷¾Í²»ÊÇÔ×ӵ쬲Ù×÷ÍêÖ®ºó¹²Ïí±äÁ¿µÄÖµ»áºÍÆÚÍûµÄ²»Ò»Ö¡£ 
Ëùν×ÜÏßËø¾ÍÊÇʹÓô¦ÀíÆ÷ÌṩµÄÒ»¸ö
LOCK££Ðźţ¬µ±Ò»¸ö´¦ÀíÆ÷ÔÚ×ÜÏßÉÏÊä³ö´ËÐźÅʱ£¬ÆäËû´¦ÀíÆ÷µÄÇëÇ󽫱»×èÈûס£¬ÄÇô¸Ã
´¦ÀíÆ÷¿ÉÒÔ¶ÀÕ¼¹²ÏíÄÚ´æ¡£
ʹÓûº´æËø±£Ö¤Ô×ÓÐÔ
µÚ¶þ¸ö»úÖÆÊÇͨ¹ý»º´æËø¶¨À´±£Ö¤Ô×ÓÐÔ¡£ÔÚͬһʱ¿Ì£¬ÎÒÃÇÖ»Ðè±£Ö¤¶Ôij¸öÄÚ´æµØÖ·
µÄ²Ù×÷ÊÇÔ×ÓÐÔ¼´¿É£¬µ«×ÜÏßËø¶¨°ÑCPUºÍÄÚ´æÖ®¼äµÄͨÐÅËø×¡ÁË£¬ÕâʹµÃËø¶¨ÆÚ¼ä£¬ÆäËû´¦
ÀíÆ÷²»ÄܲÙ×÷ÆäËûÄÚ´æµØÖ·µÄÊý¾Ý£¬ËùÒÔ×ÜÏßËø¶¨µÄ¿ªÏú±È½Ï´ó£¬Ä¿Ç°´¦ÀíÆ÷ÔÚijЩ³¡ºÏÏÂʹÓûº´æËø¶¨´úÌæ×ÜÏßËø¶¨À´½øÐÐÓÅ»¯¡£
Ëùν¡°»º´æËø¶¨¡±ÊÇÖ¸ÄÚ´æÇøÓòÈç¹û±»»º´æÔÚ´¦ÀíÆ÷µÄ»º´æ
ÐÐÖУ¬²¢ÇÒÔÚLock²Ù×÷ÆÚ¼ä±»Ëø¶¨£¬ÄÇôµ±ËüÖ´ÐÐËø²Ù×÷»ØÐ´µ½ÄÚ´æÊ±£¬´¦ÀíÆ÷²»ÔÚ×ÜÏßÉÏÉùÑÔLOCK££Ðźţ¬¶øÊÇÐÞ¸ÄÄÚ²¿µÄÄÚ´æµØÖ·£¬²¢ÔÊÐíËüµÄ»º´æÒ»ÖÂÐÔ»úÖÆÀ´±£Ö¤²Ù×÷µÄÔ×ÓÐÔ£¬ÒòΪ»º´æÒ»ÖÂÐÔ»úÖÆ»á×èֹͬʱÐÞ¸ÄÓÉÁ½¸öÒÔÉÏ´¦ÀíÆ÷»º´æµÄÄÚ´æÇøÓòÊý¾Ý£¬µ±ÆäËû´¦ÀíÆ÷»ØÐ´Òѱ»Ëø¶¨µÄ»º´æÐеÄÊý¾Ýʱ£¬»áʹ»º´æÐÐÎÞЧ
ÓÐÁ½ÖÖÇé¿öÏ´¦ÀíÆ÷²»»áʹÓûº´æËø¶¨:
1. µ±²Ù×÷µÄÊý¾Ý²»Äܱ»»º´æÔÚ´¦ÀíÆ÷ÄÚ²¿£¬»ò²Ù×÷µÄÊý¾Ý¿ç¶à¸ö»º´æÐÐ
£¨cache line£©Ê±£¬Ôò´¦ÀíÆ÷»áµ÷ÓÃ×ÜÏßËø¶¨
2. ÓÐЩ´¦ÀíÆ÷²»Ö§³Ö»º´æËø¶¨¡£¶ÔÓÚIntel 486ºÍPentium´¦ÀíÆ÷£¬¾ÍËãËø¶¨µÄ
ÄÚ´æÇøÓòÔÚ´¦ÀíÆ÷µÄ»º´æÐÐÖÐÒ²»áµ÷ÓÃ×ÜÏßËø¶¨
javaÈçºÎʵÏÖÔ×Ó²Ù×÷
ÔÚJavaÖпÉÒÔͨ¹ýËøºÍÑ»·CASµÄ·½Ê½À´ÊµÏÖÔ×Ó²Ù×÷
1. ʹÓÃÑ»·CASʵÏÖÔ×Ó²Ù×÷
2. CASʵÏÖÔ×Ó²Ù×÷µÄÈý´óÎÊÌâ
- ABAÎÊÌâ
ÒòΪCASÐèÒªÔÚ²Ù×÷ÖµµÄʱºò£¬¼ì²éÖµÓÐûÓз¢Éú±ä»¯£¬Èç¹ûûÓз¢Éú±ä»¯
Ôò¸üУ¬µ«ÊÇÈç¹ûÒ»¸öÖµÔÀ´ÊÇA£¬±ä³ÉÁËB£¬ÓÖ±ä³ÉÁËA£¬ÄÇôʹÓÃCAS½øÐмì²éʱ»á·¢ÏÖËü
µÄֵûÓз¢Éú±ä»¯£¬µ«ÊÇʵ¼ÊÉÏÈ´±ä»¯ÁË¡£ABAÎÊÌâµÄ½â¾ö˼·¾ÍÊÇʹÓð汾ºÅ¡£ÔÚ±äÁ¿Ç°Ãæ
×·¼ÓÉϰ汾ºÅ£¬Ã¿´Î±äÁ¿¸üеÄʱºò°Ñ°æ±¾ºÅ¼Ó1£¬ÄÇôA¡úB¡úA¾Í»á±ä³É1A¡ú2B¡ú3A¡£´Ó
Java 1.5¿ªÊ¼£¬JDKµÄAtomic°üÀïÌṩÁËÒ»¸öÀàAtomicStampedReferenceÀ´½â¾öABAÎÊÌâ
- Ñ»·Ê±¼ä³¤¿ªÏú´ó
×ÔÐýCASÈç¹û³¤Ê±¼ä²»³É¹¦£¬»á¸øCPU´øÀ´·Ç³£´óµÄÖ´ÐпªÏú¡£
- Ö»Äܱ£Ö¤Ò»¸ö¹²Ïí±äÁ¿µÄÔ×Ó²Ù×÷
µ±¶ÔÒ»¸ö¹²Ïí±äÁ¿Ö´ÐвÙ×÷ʱ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÑ
»·CASµÄ·½Ê½À´±£Ö¤Ô×Ó²Ù×÷£¬µ«ÊǶԶà¸ö¹²Ïí±äÁ¿²Ù×÷ʱ£¬Ñ»·CAS¾ÍÎÞ·¨±£Ö¤²Ù×÷µÄÔ×ÓÐÔ£¬Õâ¸öʱºò¾Í¿ÉÒÔÓÃËø¡£»¹ÓÐÒ»¸öÈ¡Çɵİ취£¬¾ÍÊǰѶà¸ö¹²Ïí±äÁ¿ºÏ²¢³ÉÒ»¸ö¹²Ïí±äÁ¿À´²Ù×÷¡£
3. ʹÓÃËø»úÖÆÊµÏÖÔ×Ó²Ù×÷
Ëø»úÖÆ±£Ö¤ÁËÖ»ÓлñµÃËøµÄÏ̲߳ÅÄܹ»²Ù×÷Ëø¶¨µÄÄÚ´æÇøÓò¡£JVMÄÚ²¿ÊµÏÖÁ˺ܶàÖÖËø
»úÖÆ£¬ÓÐÆ«ÏòËø¡¢ÇáÁ¿¼¶ËøºÍ»¥³âËø¡£ÓÐÒâ˼µÄÊdzýÁËÆ«ÏòËø£¬JVMʵÏÖËøµÄ·½Ê½¶¼ÓÃÁËÑ»·CAS£¬¼´µ±Ò»¸öÏß³ÌÏë½øÈëͬ²½¿éµÄʱºòʹÓÃÑ»·CASµÄ·½Ê½À´»ñÈ¡Ëø£¬µ±ËüÍ˳öͬ²½¿éµÄʱºòʹÓÃÑ»·CASÊÍ·ÅËø |