Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
java²¢·¢±à³Ì¡ª¡ªÄÚ´æÄ£ÐÍ
 
  3319  次浏览      27
 2018-12-19
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚjianshu£¬±¾ÎĽéÉÜÁ˲¢·¢±à³Ì¸ÅÄîÒÔ¼°JMMÄÚ´æÄ£ÐÍ¡¢ÄÚ´æ¼ä½»»¥²Ù×÷µÈÏà¹ØÄÚÈÝ¡£

1. ²¢·¢±à³Ì»ù´¡¸ÅÄî

²¢·¢¡ª¡ªÔÚ²Ù×÷ϵͳÖУ¬ÊÇÖ¸Ò»¸öʱ¼ä¶ÎÖÐÓм¸¸ö³ÌÐò¶¼´¦ÓÚÒÑÆô¶¯ÔËÐе½ÔËÐÐÍê±ÏÖ®¼ä£¬ÇÒÕ⼸¸ö³ÌÐò¶¼ÊÇÔÚͬһ¸ö´¦Àí»úÉÏÔËÐУ¬µ«ÈÎÒ»¸öʱ¿ÌµãÉÏÖ»ÓÐÒ»¸ö³ÌÐòÔÚ´¦Àí»úÉÏÔËÐСª¡ªÔ´×԰ٶȰٿÆ

ÔÚ²¢·¢±à³ÌÖУ¬ÎÒÃÇÐèÒª´¦ÀíÁ½¸ö¹Ø¼üÎÊÌ⣺Ïß³ÌÖ®¼äÈçºÎͨÐźÍÏß³ÌÖ®¼äÈçºÎͬ²½£¬ºóÐøÆªÕ½«Î§ÈÆÕâÁ½¸öÎÊÌâ½øÐнéÉÜ¡£

Ïß³ÌͨÐÅ£ºÊÇÖ¸Ïß³ÌÖ®¼äÒÔºÎÖÖ»úÖÆÀ´½»»»ÐÅÏ¢£¬ÔÚÃüÁîʽ±à³ÌÖУ¬Ïß³ÌÖ®¼äµÄͨÐÅ»úÖÆÓÐÁ½ÖÖ£º¹²ÏíÄÚ´æºÍÏûÏ¢´«µÝ¡£

Ïß³Ìͬ²½£ºÊÇÖ¸³ÌÐòÓÃÓÚ¿ØÖƲ»Í¬Ïß³ÌÖ®¼ä²Ù×÷·¢ÉúÏà¶Ô˳ÐòµÄ»úÖÆ¡£ÔÚJavaÖУ¬¿ÉÒÔͨ¹ývolatile£¬synchronized, ËøµÈ·½Ê½ÊµÏÖͬ²½¡£

±¾ÎÄÖ÷Òª½éÉÜjavaµÄͨÐÅ»úÖÆ£¬¸Õ½éÉܳ£¼ûͨÐÅ»úÖÆÖ÷Òª°üÀ¨ÒÔÏÂÁ½ÖÖ·½Ê½£º¹²ÏíÄڴ棺Ïß³ÌÖ®¼ä¹²Ïí³ÌÐòµÄ¹«¹²×´Ì¬£¬Ïß³ÌÖ®¼äͨ¹ýд-¶ÁÄÚ´æÖеĹ«¹²×´Ì¬À´Òþʽ½øÐÐͨÐÅ¡£

ÏûÏ¢´«µÝ£ºÏß³ÌÖ®¼äûÓй«¹²×´Ì¬£¬Ïß³ÌÖ®¼ä±ØÐëͨ¹ýÃ÷È·µÄ·¢ËÍÏûÏ¢À´ÏÔʽ½øÐÐͨÐÅ¡£JavaµÄ²¢·¢²ÉÓõÄÊǹ²ÏíÄÚ´æÄ£ÐÍ£¬JavaÏß³ÌÖ®¼äµÄͨÐÅ×ÜÊÇÒþʽ½øÐУ¬Õû¸öͨÐŹý³Ì¶Ô³ÌÐòÔ±Íêȫ͸Ã÷¡£ÔÚjavaÖУ¬ËùÓÐʵÀýÓò¡¢¾²Ì¬ÓòºÍÊý×éÔªËØ´æ´¢ÔÚ¶ÑÄÚ´æÖУ¬¶ÑÄÚ´æÔÚÏß³ÌÖ®¼ä¹²Ïí¡£

JavaÏß³ÌÖ®¼äµÄͨÐÅÓÉJavaÄÚ´æÄ£ÐÍ£¨±¾Îļò³ÆÎªJMM£©¿ØÖÆ£¬JMM¾ö¶¨Ò»¸öÏ̶߳Թ²Ïí±äÁ¿µÄдÈëºÎʱ¶ÔÁíÒ»¸öÏ߳̿ɼû¡£

2. JMMÄÚ´æÄ£ÐÍ

JMM£¨Java Memory Model£©ÊÇJVM¹æ·¶Öж¨ÒåµÄÒ»ÖÖJavaÄÚ´æÄ£ÐÍ£¬ËüµÄÄ¿µÄÊÇÆÁ±Îµô¸÷ÖÖÓ²¼þºÍ²Ù×÷ϵͳµÄÄÚ´æ·ÃÎʲîÒ죬ÒÔʵÏÖÈÃJava³ÌÐòÔÚ¸÷ÖÖÆ½Ì¨Éϵ½ÄÜ´ïµ½Ò»ÖµÄÄÚ´æ·ÃÎÊЧ¹û¡£

JavaÄÚ´æÄ£Ð͵ÄÖ÷Òª¶¨Òå³ÌÐòÖи÷¸ö±äÁ¿µÄ·ÃÎʹæÔò£¬¼´ÔÚÐéÄâ»úÖн«±äÁ¿´æ´¢µ½ÄÚ´æºÍ´ÓÄÚ´æÖÐÈ¡³ö±äÁ¿ÕâÑùµ×²ãϸ½Ú¡£Ê×Ïȼòµ¥ËµÃ÷¼¸¸ö³£ÓÃÃû³Æ¶¨Ò壺±äÁ¿£ºÕâÀïÖ¸°üÀ¨ÁËʵÀý×ֶΡ¢¾²Ì¬×ֶκ͹¹³ÉÊý×é¶ÔÏóµÄÔªËØ£¬µ«ÊDz»°üÀ¨¾Ö²¿±äÁ¿Óë·½·¨²ÎÊý£¬ºóÕßÊÇÏß³Ì˽Óе쬲»»á±»¹²Ïí¡£

Ö÷Äڴ棺ÔÚjavaÖУ¬ÊµÀýÓò¡¢¾²Ì¬ÓòºÍÊý×éÔªËØÊÇÏß³ÌÖ®¼ä¹²ÏíµÄÊý¾Ý£¬ËüÃÇ´æ´¢ÔÚÖ÷ÄÚ´æÖС£

¹¤×÷Äڴ棺ÿÌõÏ̶߳¼ÓÐ×Ô¼ºµÄ¹¤×÷Äڴ棬Ï̵߳Ť×÷ÄÚ´æÖб£´æÁ˸ÃÏß³ÌʹÓõ½µÄ±äÁ¿µ½Ö÷Äڴ渱±¾¿½±´£¬Ï̶߳ԱäÁ¿µÄËùÓвÙ×÷£¨¶ÁÈ¡¡¢¸³Öµ£©¶¼±ØÐëÔÚ¹¤×÷ÄÚ´æÖнøÐУ¬¶ø²»ÄÜÖ±½Ó¶ÁдÖ÷ÄÚ´æÖеıäÁ¿¡£

Ï̡߳¢Ö÷ÄÚ´æºÍ¹¤×÷ÄÚ´æÖ®¼ä½»»¥¹ØÏµ

Ï̡߳¢Ö÷ÄÚ´æºÍ¹¤×÷ÄÚ´æµÄ½»»¥¹ØÏµÈçÉÏͼËùʾ£¬ºÍCPU-»º´æ-ÄÚ´æºÜÀàËÆ¡£

²»Í¬Ïß³ÌÖ®¼äÎÞ·¨Ö±½Ó·ÃÎʶԷ½¹¤×÷ÄÚ´æÖеıäÁ¿£¬Ï̼߳ä±äÁ¿ÖµµÄ´«µÝ¾ùÐèÒªÔÚÖ÷ÄÚ´æÀ´Íê³É¡£

×îºó×¢Ò⣬ΪÁË»ñµÃ½ÏºÃµÄÖ´ÐÐÐÔÄÜ£¬JavaÄÚ´æÄ£ÐͲ¢Ã»ÓÐÏÞÖÆÖ´ÐÐÒýÇæÊ¹Óô¦ÀíÆ÷µÄ¼Ä´æÆ÷»òÕ߸ßËÙ»º´æÀ´ÌáÉýÖ¸ÁîÖ´ÐÐËÙ¶È£¬Ò²Ã»ÓÐÏÞÖÆ±àÒëÆ÷¶ÔÖ¸Áî½øÐÐÖØÅÅÐò¡£Ò²¾ÍÊÇ˵£¬ÔÚjavaÄÚ´æÄ£ÐÍÖУ¬Ò²»á´æÔÚ»º´æÒ»ÖÂÐÔÎÊÌâºÍÖ¸ÁîÖØÅÅÐòµÄÎÊÌâ¡£

3. ÄÚ´æ¼ä½»»¥²Ù×÷

¹ØÓÚÖ÷ÄÚ´æÓ빤×÷ÄÚ´æÖ®¼äµÄ¾ßÌå½»»¥Ð­Ò飬¼´Ò»¸ö±äÁ¿ÈçºÎ´ÓÖ÷Äڴ濽±´µ½¹¤×÷ÄÚ´æ¡¢ÈçºÎ´Ó¹¤×÷ÄÚ´æÍ¬²½µ½Ö÷ÄÚ´æÖ®¼äµÄʵÏÖϸ½Ú£¬JavaÄÚ´æÄ£ÐͶ¨ÒåÁËÒÔϰËÖÖ²Ù×÷À´Íê³É£º

lock£¨Ëø¶¨£©£º×÷ÓÃÓÚÖ÷ÄÚ´æµÄ±äÁ¿£¬°ÑÒ»¸ö±äÁ¿±êʶΪһÌõÏ̶߳Àռ״̬¡£

unlock£¨½âËø£©£º×÷ÓÃÓÚÖ÷ÄÚ´æ±äÁ¿£¬°ÑÒ»¸ö´¦ÓÚËø¶¨×´Ì¬µÄ±äÁ¿ÊͷųöÀ´£¬ÊͷźóµÄ±äÁ¿²Å¿ÉÒÔ±»ÆäËûÏß³ÌËø¶¨¡£

read£¨¶ÁÈ¡£©£º×÷ÓÃÓÚÖ÷ÄÚ´æ±äÁ¿£¬°ÑÒ»¸ö±äÁ¿Öµ´ÓÖ÷ÄÚ´æ´«Êäµ½Ï̵߳Ť×÷ÄÚ´æÖУ¬ÒÔ±ãËæºóµÄload¶¯×÷ʹÓÃ

load£¨ÔØÈ룩£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ëü°Ñread²Ù×÷´ÓÖ÷ÄÚ´æÖеõ½µÄ±äÁ¿Öµ·ÅÈ빤×÷ÄÚ´æµÄ±äÁ¿¸±±¾ÖС£

use£¨Ê¹Óã©£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬°Ñ¹¤×÷ÄÚ´æÖеÄÒ»¸ö±äÁ¿Öµ´«µÝ¸øÖ´ÐÐÒýÇæ£¬Ã¿µ±ÐéÄâ»úÓöµ½Ò»¸öÐèҪʹÓñäÁ¿µÄÖµµÄ×Ö½ÚÂëÖ¸Áîʱ½«»áÖ´ÐÐÕâ¸ö²Ù×÷¡£

assign£¨¸³Öµ£©£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ëü°ÑÒ»¸ö´ÓÖ´ÐÐÒýÇæ½ÓÊÕµ½µÄÖµ¸³Öµ¸ø¹¤×÷ÄÚ´æµÄ±äÁ¿£¬Ã¿µ±ÐéÄâ»úÓöµ½Ò»¸ö¸ø±äÁ¿¸³ÖµµÄ×Ö½ÚÂëÖ¸ÁîʱִÐÐÕâ¸ö²Ù×÷¡£

store£¨´æ´¢£©£º×÷ÓÃÓÚ¹¤×÷ÄÚ´æµÄ±äÁ¿£¬°Ñ¹¤×÷ÄÚ´æÖеÄÒ»¸ö±äÁ¿µÄÖµ´«Ë͵½Ö÷ÄÚ´æÖУ¬ÒÔ±ãËæºóµÄwriteµÄ²Ù×÷¡£

write£¨Ð´È룩£º×÷ÓÃÓÚÖ÷ÄÚ´æµÄ±äÁ¿£¬Ëü°Ñstore²Ù×÷´Ó¹¤×÷ÄÚ´æÖÐÒ»¸ö±äÁ¿µÄÖµ´«Ë͵½Ö÷ÄÚ´æµÄ±äÁ¿ÖС£

ËùÒÔ±äÁ¿¶Áд°üº¬ÒÔϼ¸¸ö²½Ö裺

±äÁ¿´ÓÖ÷ÄÚ´æ¸´ÖÆµ½¹¤×÷Äڴ桪¡ªË³ÐòÖ´ÐÐreadºÍload²Ù×÷

±äÁ¿´Ó¹¤×÷ÄÚ´æÍ¬²½µ½Ö÷Äڴ桪¡ªË³ÐòÖ´ÐÐstoreºÍwrite²Ù×÷

×¢Ò⣬JavaÄÚ´æÄ£ÐÍÖ»ÒªÇóÉÏÊö²Ù×÷±ØÐ밴˳ÐòÖ´ÐУ¬¶øÃ»Óб£Ö¤±ØÐëÊÇÁ¬ÐøÖ´ÐС£Ò²¾ÍÊÇreadºÍloadÖ®¼ä£¬storeºÍwriteÖ®¼äÊÇ¿ÉÒÔ²åÈëÆäËûÖ¸ÁîµÄ¡£

³ýÁ˶¨ÒåÒÔÉÏ8ÖÐÔ­×Ó²Ù×÷£¬JavaÄÚ´æÄ£ÐÍ»¹¹æ¶¨ÁËÉÏÊö8ÖÖ»ù±¾²Ù×÷ÔÚÖ´ÐÐʱ±ØÐëÂú×ãÒ»¶¨µÄ²Ù×÷¹æÔò£¬ÀýÈçÈç²»ÔÊÐíreadºÍloadµ¥¶À³öÏÖ£¨¼´²»ÔÊÐíÒ»¸ö±äÁ¿´ÓÖ÷ÄÚ´æÖжÁÈ¡µ«¹¤×÷ÄÚ´æ²»½ÓÊÜ£©£¬²»ÔÊÐístoreºÍwriteµ¥¶À³öÏÖ£¨¼´²»ÔÊÐí´Ó¹¤×÷ÄÚ´æÖз¢ÆðÁË»ØÐ´µ¥Ö÷ÄÚ´æ²»½ÓÊÜ£©£¬ÕâÀï²»Ò»Ò»Áо٣¬ÏêÏ¸ÍøÉÏËÑË÷¼´¿É¡£

JavaÄÚ´æÄ£ÐÍ»¹¶¨ÒåÁËvolatileÐͱäÁ¿µÄÌØÊâ¹æÔò£¨ÏÂÒ»½Ú½éÉÜ£©£¬ÒÔÉÏÈýÖֹ涨¹²Í¬È·¶¨ÁËJavaÖÐÄÄЩÄÚ´æ·ÃÎʲÙ×÷Êǰ²È«µÄ¼´£º

8ÖÖÔ­×Ó²Ù×÷+²Ù×÷¹æÔò+volatile¹æ¶¨=JavaÖÐÄÄЩÄÚ´æ·ÃÎʲÙ×÷Êǰ²È«µÄ

4. volatileÐͱäÁ¿¹æ¶¨

µ±Ò»¸ö±äÁ¿±»¶¨ÒåΪvolatileºó£¬½«¾ß±¸Á½ÖÖÌØÐÔ£º

ÌØÐÔÒ»£º±£Ö¤´Ë±äÁ¿¶ÔËùÓÐÏ̵߳ĿɼûÐÔ

ÌØÐÔ¶þ£º½ûÖ¹Ö¸ÁîÖØÅÅÐòÓÅ»¯

4.1 volatile¿É¼ûÐÔ

¿É¼ûÐÔÊÇÖ¸µ±¶à¸öÏ̷߳ÃÎÊͬһ¸ö±äÁ¿Ê±£¬Ò»¸öÏß³ÌÐÞ¸ÄÁËÕâ¸ö±äÁ¿µÄÖµ£¬ÆäËûÏß³ÌÄܹ»Á¢¼´¿´µÃµ½Ð޸ĵÄÖµ¡£

ÆÕͨµÄ¹²Ïí±äÁ¿²»Äܱ£Ö¤¿É¼ûÐÔ£¬ÒòΪÆÕͨ¹²Ïí±äÁ¿±»ÐÞ¸ÄÖ®ºó£¬Ê²Ã´Ê±ºò±»Ð´ÈëÖ÷´æÊDz»È·¶¨µÄ£¬µ±ÆäËûÏß³ÌÈ¥¶Áȡʱ£¬´ËʱÄÚ´æÖпÉÄÜ»¹ÊÇÔ­À´µÄ¾ÉÖµ£¬Òò´ËÎÞ·¨±£Ö¤¿É¼ûÐÔ¡£

µ«ÊÇ£¬ÐèҪעÒâµÄÊÇvolatile±äÁ¿Ö»±£Ö¤¿É¼ûÐÔ£¬µ«ÊÇjavaÀïÃæµÄÔËËã²¢·ÇÈ«²¿¶¼ÊÇÔ­×Ó²Ù×÷ÀýÈç++²Ù×÷£¬ÕâÑùͬÑùµ¼ÖÂvolatileÐÞÊαäÁ¿javaÔËËã²»°²È«¡£

Ò»°ã²»·ûºÏÒÔÏÂÁ½Ìõ¹æÔòµÄÔËË㳡¾°ÖУ¬ÎÒÃÇÐèҪͨ¹ý¼ÓËø£¨synchronized»ò²¢·¢°üÖеÄËø£©±£Ö¤±äÁ¿Ô­×ÓÐÔ£º

ÔËËã½á¹û²¢²»ÒÀÀµ±äÁ¿µÄµ±Ç°Öµ£¬»òÕßÄܹ»È·±£Ö»Óе¥Ò»µÄÏß³ÌÐ޸ıäÁ¿µÄÖµ£¨±ÈÈç++²Ù×÷²»·ûºÏÒÀÀµµ±Ç°Öµ£©

±äÁ¿²»ÐèÒªÓëÆäËû״̬±äÁ¿¹²Í¬²ÎÓë²»±äÔ¼Êø

³£¼ûµÄvolatileÐÞÊαäÁ¿µÄ³¡¾°ÊÇÓÃÀ´×÷Ϊ¿ª¹Ø¿ØÖƲ¢·¢£º

volatile¿ª¹Ø

4.2 ½ûÖ¹Ö¸ÁîÖØÅÅÐò

ÖØÅÅÐò£ºÊÇÖ¸¡°±àÒëÆ÷ºÍ´¦ÀíÆ÷¡±ÎªÁËÌá¸ßÐÔÄÜ£¬¶øÔÚ³ÌÐòÖ´ÐÐʱ»á¶Ô³ÌÐò½øÐеÄÖØÅÅÐò¡£´óÖ¿ÉÒÔ·ÖΪÒÔÏÂÈýÀࣺ±àÒëÆ÷ÓÅ»¯Ö¸ÁîÖØÅÅ£¬²»¸Ä±äµ¥Ïß³ÌÓïÒåµÄÇé¿öÏ£¬ÖØÐ°²ÅÅÖ¸ÁîÖ´ÐеÄ˳Ðò¡£

Ö¸Áî¼¶²¢ÐÐÖØÅÅÐò£¬¸ÃÓÅ»¯Ö÷ÒªÊÇΪÁËÈóÌÐò·¢»ÓÏÖ´ú´¦ÀíÆ÷µÄÖ¸Áî¼¶²¢ÐÐÖ´ÐÐÄÜÁ¦£¬Ç°ÌáÊÇÕâЩÓï¾ä²»´æÔÚÊý¾ÝÒÀÀµ¡£

ÄÚ´æÏµÍ³ÖØÅÅÐò£¬Ö÷Òª·¢ÉúÔÚ´¦ÀíÆ÷¶Áд»º³åÇø£¬¶Áд¹ý³Ì¿´ÆðÀ´ÊÇÎÞÐòµÄ£¬µ«×îÖÕ½á¹ûÊÇÓÐÐòµÄ

´ÓJavaÔ´´úÂëµ½×îÖÕʵ¼ÊÖ´ÐеÄÖ¸ÁîÐòÁУ¬»á¾­¹ýÏÂÃæÈýÖÖÖØÅÅÐò£º

ʵ¼ÊÖ´ÐÐÖ¸ÁîÐòÁÐ

ÒÔÉÏÖØÅÅÐò¿ÉÄܻᵼÖ¶àÏß³ÌÖгöÏÖÄÚ´æ¿É¼ûÐÔÎÊÌ⣬Õë¶Ô±àÒëÆ÷ÖØÅÅÐòJMMµÄ±àÒëÆ÷ÖØÅÅÐò¹æÔò»á½ûÖ¹ÌØ¶¨ÀàÐ͵ıàÒëÆ÷ÖØÅÅÐò¡£

¶ø¶ÔÓÚºóÁ½ÖÖÖØÅÅÐò£¬JMMµÄ´¦ÀíÆ÷ÖØÅÅÐò¹æÔò»áÒªÇójava±àÒëÆ÷ÔÚÉú³ÉÖ¸ÁîÐòÁÐʱ£¬²åÈëÌØ¶¨ÀàÐ͵ÄÄÚ´æÆÁÕÏ£¨memory barriers£¬intel³ÆÖ®Îªmemory fence£©Ö¸Áͨ¹ýÄÚ´æÆÁÕÏÖ¸ÁîÀ´½ûÖ¹ÌØ¶¨ÀàÐ͵Ĵ¦ÀíÆ÷ÖØÅÅÐò£¨²»ÊÇËùÓеĴ¦ÀíÆ÷ÖØÅÅÐò¶¼Òª½ûÖ¹£©¡£

ÏÂÃæÎÒÃÇ¿´ÏÂjvmÈçºÎʵÏÖvolatile½ûÖ¹Ö¸ÁîÖØÅÅÐòµÄ£º

volatile±äÁ¿Ð´²Ù×÷£¬jvm»áÏò´¦ÀíÆ÷·¢ËÍÒ»ÌõLockǰ׺ÃüÁ½«±äÁ¿ËùÔڵĻº´æÐÐϵ»áµ½ÏµÍ³ÄÚ´æ¡£ÆäËû´¦ÀíÆ÷ͨ¹ýÐá̽×ÜÏßÉÏ´«²¥µÄÊý¾Ý¼ì²â×Ô¼ºµÄÊý¾ÝÊÇ·ñ¹ýÆÚ£¬Èç¹û·¢ÏÖ¹ýÆÚ»áÖÃΪÎÞЧ£¬ÔÙ´ÎʹÓÃʱ»á´ÓϵͳÄÚ´æ»ñÈ¡

Lockǰ׺ÃüÁî½ûÖ¹¸ÃÖ¸ÁîÓë֮ǰºÍÖ®ºóµÄ¶ÁºÍдָÁîÖØÅÅÐò¡£

×îºó£¬¹ØÓÚvolatile½ûÖ¹ÖØÅÅÐò¼¸µãʹÓÃ˵Ã÷£º

²»»á¶Ôvolatile¶ÁÓëvolatile¶ÁºóÃæµÄÈÎÒâÄÚ´æ²Ù×÷ÖØÅÅÐò

²»»á¶ÔvolatileдÓëvolatileд֮ǰµÄÈÎÒâÄÚ´æ²Ù×÷ÖØÅÅÐò

CASͬʱ¾ßÓÐvolatile¶ÁºÍдÄÚ´æµÄÓïÒ壬javaµÄCASʹÓÃÏÖ´ú´¦ÀíÆ÷ÌṩµÄ¸ßЧ¼¶±ðµÄÔ­×ÓÖ¸ÁÕâЩԭ×ÓÖ¸ÁîÒÔÔ­×Ó·½Ê½¶ÔÄÚ´æÖ´ÐжÁ-¸Ä-д²Ù×÷£¬ÕâÊǶദÀíÆ÷ÖÐʵÏÖͬ²½µÄ¹Ø¼ü¡£

5. JMMÄÚ´æÄ£ÐÍ×ܽá

×ܵÄÀ´ËµJMMÄÚ´æÄ£ÐÍÊÇÎ§ÈÆ×ÅÔÚ²¢·¢¹ý³ÌÖÐÈçºÎ´¦ÀíÔ­×ÓÐÔ¡¢¿É¼ûÐÔºÍÓÐÐòÐÔÈý¸öÌØÕ÷À´½¨Á¢µÄ¡£ÏÂÃæ¾ÍÈý¸öÌØÕ÷·Ö±ð˵Ã÷£º

5.1 Ô­×ÓÐÔ

Ô­×ÓÐÔ£º¼´Ò»¸ö²Ù×÷»òÕß¶à¸ö²Ù×÷ Ҫôȫ²¿Ö´Ðв¢ÇÒÖ´ÐеĹý³Ì²»»á±»ÈκÎÒòËØ´ò¶Ï£¬ÒªÃ´¾Í¶¼²»Ö´ÐС£

javaÄÚ´æÄ£Ð͵Äread¡¢load¡¢assign¡¢use¡¢storeºÍwriteÁù¸ö²Ù×÷Ö±½Ó±£Ö¤Ô­×ÓÐÔ£¬ÎÒÃÇ¿ÉÒÔÈÎÎñ»ù±¾Êý¾ÝÀàÐÍ·ÃÎʶÁдÊǾßÓÐÔ­×ÓÐÔ£¨ÌØÊâ˵Ã÷long double64λ²Ù×÷¸ù¾ÝjvmʵÏÖÓйأ©¡£

Èç¹û³¡¾°ÖÐÐèÒª´ó·¶Î§µÄÔ­×ÓÐÔ±£Ö¤£¬javaÄÚ´æÄ£ÐÍÌṩÁËlockºÍunlock²Ù×÷À´Âú×㣬¶ÔÓ¦µ½java´úÂë¹Ø¼ü×Ö¼´ÊÇ¡ª¡ªsynchronized¡£

5.2 ¿É¼ûÐÔ

¿É¼ûÐÔÊÇÖ¸µ±¶à¸öÏ̷߳ÃÎÊͬһ¸ö±äÁ¿Ê±£¬Ò»¸öÏß³ÌÐÞ¸ÄÁËÕâ¸ö±äÁ¿µÄÖµ£¬ÆäËûÏß³ÌÄܹ»Á¢¼´¿´µÃµ½Ð޸ĵÄÖµ¡£

³ýÁËÉÏÃæ½éÉܵÄvolatileÍ⣬java»¹ÌṩÁËÁ½¸ö¹Ø¼ü×ÖʵÏֿɼûÐÔ£¬synchronizedºÍfinal¡£finalµÄ¿É¼ûÐÔ£ºÊÇÖ¸±»finalÐÞÊεÄ×Ö¶ÎÔÚ¹¹ÔìÆ÷ÖÐÒ»µ©Íê³É£¬ÄÇôÔÚÆäËûÏ߳̾ͿÉÒÔ¿´¼ûfinal×Ö¶ÎÖµsynchronized¿É¼ûÐÔ£ºÊÇÖ¸¶ÔÒ»¸ö±äÁ¿Ö´ÐÐunlock²Ù×÷֮ǰ£¬±ØÐëÏȰѴαäÁ¿Í¬²½»áÖ÷ÄÚ´æÕâÌõ²Ù×÷¹æÔòÏÞÖÆ

5.3 ÓÐÐòÐÔ

ÓÐÐòÐÔ£º¼´³ÌÐòÖ´ÐеÄ˳Ðò°´ÕÕ´úÂëµÄÏȺó˳ÐòÖ´ÐС£

javaÖÐÌìÈ»ÓÐÐòÐÔ¿ÉÒÔ×ܽáΪһ¾ä»°£ºÈç¹ûÔÚ±¾Ïß³ÌÄڹ۲죬ËùÓеIJÙ×÷¶¼ÊÇÓÐÐòµÄ£»Èç¹ûÔÚÒ»¸öÏß³ÌÖй۲ìÁíÍâÒ»¸öỊ̈߳¬ËùÓвÙ×÷¶¼ÊÇÎÞÐòµÄ¡£Ç°°ë¾äÊÇÖ¸¡°Ïß³ÌÄÚ±íÏÖΪ´®ÐÐÓïÒ塱£¬ºó°ë¾ä±íʾ¡°Ö¸ÁîÖØÅÅ¡±ºÍ¡°¹¤×÷ÄÚ´æÓëÖ÷ÄÚ´æÍ¬²½ÑÓ³Ù¡±ÏÖÏó¡£

javaÌṩÁËvolatileºÍsynchronizedÁ½¸ö¹Ø¼ü×ÖÀ´±£Ö¤Ïß³ÌÖ®¼ä²Ù×÷µÄÓÐÐòÐÔ£¬ÕâÀïsynchronizedÔòÊÇÓС°Í¬Ò»Ê±¿ÌÖ»ÔÊÐíÒ»ÌõÏß³Ì¶ÔÆä½øÐÐlock²Ù×÷¡±ÕâÌõ²Ù×÷¹æ¶¨»ñÈ¡µÄ£¬Õâ¸ö¹æÔò¾ö¶¨ÁËͬһ¸öËøµÄÁ½¸öͬ²½¿éÖ»ÄÜ´®ÐнøÈë¡£

×îºó£¬¿ÉÒÔ·¢ÏÖsynchronized¹Ø¼ü×Ö¿ÉÒÔͬʱ½â¾öÉÏÊöÈý¸öÎÊÌ⣬µ±È»Õâ¸öÐèÒª¸¶³ö´ú¼Û¾ÍÊÇÐÔÄÜÎÊÌâ¡£

 
   
3319 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö