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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaḬ̈߳²È«
 
×÷Õߣºohzyo
  2135  次浏览      30
 2021-1-18 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËʵÏÖḬ̈߳²È«±£Ö¤Êý¾Ý²Ù×÷µÄÁ½¸öÌØÐÔ¡¢Volatile:¿É¼ûÐԵı£Ö¤¡¢Synchronized¡¢Æ«ÏòËøµÈµÈÏà¹ØÄÚÈÝ¡£
±¾ÎÄÀ´×ÔÓÚ¼òÊ飬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

ÎÊÌâµÄÆðÔ´

Ê×ÏÈ£¬Java²¢·¢µÄÎÊÌâÒª´ÓJMM£¨Java Memory Model£©½²Æð£¬ÏÈÉÏÒ»ÕÅJMMµÄ½á¹¹Í¼£º

ÔÚJavaÄÚ´æÄ£ÐÍÖУ¬·ÖΪÖ÷ÄÚ´æºÍÏ̹߳¤×÷Äڴ棬Ïß³ÌʹÓù²ÏíÊý¾Ýʱ£¬¶¼ÊÇÏÈ´ÓÖ÷ÄÚ´æÖп½±´µ½¹¤×÷Äڴ棬ʹÓÃÍê³ÉÖ®ºóÔÙдÈëÖ÷Äڴ棬¿ÉÒÔÀí½âΪÏß³ÌÖ®¼äͨѶÊÇͨ¹ý¹²ÏíÄÚ´æµÄ·½Ê½ÊµÏֵġ£

ÔÚ¶àÏ̻߳·¾³Ï£¬²»Í¬Ï̶߳Ôͬһ·ÝÊý¾Ý²Ù×÷£¬¾Í¿ÉÄÜ»á²úÉú²»Í¬Ïß³ÌÖÐÊý¾Ý״̬²»Ò»ÖµÄÇé¿ö£¬Õâ¾ÍÊÇḬ̈߳²È«ÎÊÌâµÄ¶¨Òå»òÕß˵ԭÒò¡£

ҪʵÏÖḬ̈߳²È«£¬ÐèÒª±£Ö¤Êý¾Ý²Ù×÷µÄÁ½¸öÌØÐÔ£º

Ô­×ÓÐÔ£º¶ÔÊý¾ÝµÄ²Ù×÷²»»áÊÜÆäËûÏ̴߳ò¶Ï£¬Òâζ×ÅÒ»¸öÏ̲߳Ù×÷Êý¾Ý¹ý³ÌÖв»»á²åÈëÆäËûÏ̶߳ÔÊý¾ÝµÄ²Ù×÷

¿É¼ûÐÔ£ºµ±Ïß³ÌÐÞ¸ÄÁËÊý¾ÝµÄ״̬ʱ£¬Äܹ»Á¢¼´±»ÆäËûÏß³ÌÖªÏþ£¬¼´Êý¾ÝÐ޸ĺó»áÁ¢¼´Ð´ÈëÖ÷Äڴ棬ºóÐøÆäËûÏ̶߳Áȡʱ¾ÍÄܵÃÖªÊý¾ÝµÄ±ä»¯

ÒÔÉÏÁ½¸öÌØÐÔ½áºÏÆðÀ´£¬Æäʵ¾ÍÏ൱ÓÚͬһʱ¿ÌÖ»ÄÜÓÐÒ»¸öÏß³ÌÈ¥½øÐÐÊý¾Ý²Ù×÷²¢½«½á¹ûдÈëÖ÷´æ£¬ÕâÑù¾Í±£Ö¤ÁËḬ̈߳²È«¡£

½ÓÏÂÀ´½áºÏJavaÖÐḬ̈߳²È«µÄʵÏÖÀ´¿´¡£

Volatile:¿É¼ûÐԵı£Ö¤

volatileÓÐÁ½µãÌØÐÔ£¬µÚÒ»ÊDZ£Ö¤±äÁ¿¶ÔËùÓÐÏ̵߳ĿɼûÐÔ£¬¶ÔÓÚÆÕͨ±äÁ¿£¬Ò»¸öÏß³Ì¶ÔÆäÐ޸ĺ󲢲»±£Ö¤»áÁ¢¼´Ð´ÈëÖ÷´æ£¬Ö»Óе±Ð´ÈëÖ÷´æÖ®ºó²Å»á¶ÔÆäËûÏ߳̿ɼû£¬¶øvolatile¹Ø¼ü×ÖÄܹ»±£Ö¤Ïß³ÌÐÞ¸ÄÍê±äÁ¿Á¢¼´Ð´»ØÖ÷´æ£¬¶øÇÒÿ¸öÏß³ÌÔÚʹÓñäÁ¿Ç°¶¼±ØÐëÏÈ´ÓÖ÷´æË¢ÐÂÊý¾Ý£¬ÕâÑù¾Í±£Ö¤ÁËÐ޸ĵĿɼûÐÔ¡£

µÚ¶þµãʱ½ûÖ¹Ö¸ÁîµÄÖØÅÅÐò£¬Java±àÒëÆ÷»á¶ÔÎÞ½á¹ûÒÀÀµµÄ´úÂëÖ¸Áî½øÐÐÖØÅÅÐò£¬ÏÂÃæÕâ¶Îα´úÂë¿ÉÒÔ˵Ã÷Ö¸ÁîÖØÅÅÐòµ¼ÖµIJ¢·¢ÎÊÌ⣺

//Ïß³ÌAÖ´ÐÐ
void init(){
list = new ArrayList<>();
...
init = true;
}
//Ïß³ÌBÖ´ÐÐ
void run(){
if(init) //dosomething
}

init = trueÓëÆäËû´úÂëÎÞ½á¹û¹ØÁª£¬ËùÒÔ¿ÉÄܱ»ÖØÅÅÐòµ½Ç°Ã棬µ¼ÖÂÏß³ÌBÖ´ÐÐʱÈÏΪ³õʼ»¯Íê³Éµ«ÊÇlist²¢Ã»Óи³Öµ£¬Èç¹ûÓÃvolatile¹Ø¼ü×Ö¾ÍÄܱÜÃâÕâÖÖÖ¸ÁîÖØÅÅÐò¡£

volatileËäÈ»±£Ö¤Á˿ɼûÐÔ£¬µ«²¢Ã»Óб£Ö¤²Ù×÷µÄÔ­×ÓÐÔ£¬»¹ÊÇ»á³öÏÖA¡¢BÏß³Ìͬʱ¶ÁÈ¡µ½¹²ÏíÊý¾Ý£¬È»ºó¸÷×ÔÐ޸ĵ¼Ö½á¹û¸²¸ÇµÄÎÊÌ⣬ËùÒÔÎÞ·¨±£Ö¤Ḭ̈߳²È«¡£

volatileʵ¼ÊÊÊÓó¡¾°Ö÷Òª¿ÉÒÔ½áºÏCAS²Ù×÷£¬Ìá¸ß²¢·¢µÄÐÔÄÜ£¬¾ÍÈçͬJava concurrentÀà¿âÖеÄÓ÷¨£¬ÒòΪvolatileµÄÐÔÄÜÊǺÜÇáÁ¿µÄ£¬Äܹ»±ÜÃâCAS²Ù×÷ÒòΪÊý¾ÝµÄ¿É¼ûÐÔÎÊÌâ¶øµ¼ÖÂʧ°Ü¡£

Synchronized

SynchronizedÖ÷ÒªÊÇͨ¹ý¶ÔÏóËøµÄ·½Ê½À´ÊµÏÖḬ̈߳²È«£¨Õâ±ßµÄËøÊÇÖ¸ÐéÄâ»úʵÏÖµÄËø£¬ºÍJava LockÀà¿â²»ÊÇÒ»¸ö¸ÅÄ£¬ÐÞÊξ²Ì¬·½·¨»ñÈ¡µÄÊÇClass¶ÔÏóµÄËø£¬ÐÞÊη½·¨ÊÇ»ñÈ¡µ±Ç°¶ÔÏóthisµÄËø£¬ÐÞÊÎÀ¨ºÅÄÚÈÝÊÇ»ñÈ¡À¨ºÅÄÚ¶ÔÏóµÄËø¡£

¶ÔÏóËø·ÖΪƫÏòËø¡¢ÇáÁ¿¼¶Ëø¡¢ÖØÁ¿¼¶Ëø£¬ËøÐÅÏ¢¼Ç¼ÔÚ¶ÔÏóÍ·ÖУ¨Mark Word£¬ÏêÇé²Î¿¼±íÖнṹ£©£¬¶ÔÓ¦Ëø±ê־λΪÇáÁ¿¼¶Ëø£º00£¬ÖØÁ¿¼¶Ëø£º10£¬GC±êÖ¾£º11£¬Æ«ÏòËø£º01¡£Mark Word

Ï̻߳ñÈ¡¶ÔÏóËø¶¼ÊÇͨ¹ýCAS²Ù×÷Ð޸ĶÔÏóÍ·ÖеÄÖ¸ÏòËù¼Ç¼µÄÖ¸ÕëºÍËø×´Ì¬£¬Æ«ÏòËø¡¢ÇáÁ¿¼¶Ëø¡¢ÖØÁ¿¼¶ËøµÄ·ÖÀàÖ÷ÒªÔÚÓÚ¼ÓËø¡¢½âËøÊ±µÄÁ÷³Ì²»Í¬£¬ÐÔÄÜ¿ªÖ§²»Í¬°ÕÁË¡£

Æäʵ¿ÉÒÔ¿´µ½£¬¶ÔÏóËøµÄ»ñÈ¡¶¼ÊÇͨ¹ýCASÐ޸ĶÔÏóÍ·À´ÊµÏֵģ¬ÄÇΪʲô»¹Òª·ÖÕâô¶àÖÖÀàÄØ£¿ÆäʵËûÃǵļÓËø½âËø¹ý³Ì»¹ÊÇÓÐÇø±ðµÄ£¬Ê¹Óó¡¾°Ò²²»Ò»Ñù£º

Æ«ÏòËø

Ëø²»»áÖ÷¶¯ÊÍ·Å£¬Ö»Óе±³öÏÖ¾ºÕùʱ£¬²Å»áÈ¥¼ì²éÊÇ·ñÐèÒªÊÍ·Å»òÕßÖØÐÂÆ«ÏòËø£¬Ö÷ÒªÓ¦Óó¡¾°ÊÊÓÃÓÚ»ù±¾Ö»ÓÐÒ»¸öÏ̷߳ÃÎÊͬ²½´úÂë¿é£¬¿ÉÒÔÎÞÏÞÖØ¸´»ñȡƫÏòËø£¬´ó¼Ò¿ÉÒÔ¿´µ½ÆäʵÔÚ¾ºÕùÆ«ÏòËøÊ±ÐèÒªÔÚÔÝÍ£µ±Ç°³ÖÓÐËøµÄÏ̵߳썵±È»ÊÇÒªÔÚ°²È«µãÔÝÍ££©£¬ËùÒÔÔڸ߲¢·¢¸ß¾ºÕùµÄÇé¿öÏ¿ÉÒÔ¿¼ÂÇ¹Ø±ÕÆ«ÏòËø¡£

ÇáÁ¿¼¶Ëø&ÖØÁ¿¼¶Ëø

ÇáÁ¿¼¶ËøÔÚ¾ºÕùËøÊ§°Üʱ£¬»áͨ¹ý×ÔÐýµÄ·½Ê½³¢ÊÔ»ñÈ¡Ëø£¬¶øÖØÁ¿¼¶Ëø¾ºÕùʧ°Üºó»áÖ±½Ó×èÈûÏ̡߳£ËùÒÔ£¬ÇáÁ¿¼¶ËøÊÊÓÃÓÚÄÇЩͬ²½´úÂë¿éÖ´ÐÐËٶȺܿìµÄ³¡¾°£¬¶øÖØÁ¿¼¶ËøÔò¶ÔӦͬ²½´úÂë¿éÖ´ÐÐʱ¼ä³¤µÄ³¡¾°¡£

Concurrent

JavaÀà¿âÖÐÓÐרÃŵÄconcurrent°üʵÏÖḬ̈߳²È«£¬ºËÐÄÀà¾ÍÊÇAQS£¨AbstractQueuedSynchronizer£©£¬Ò»¸ö³éÏó¶ÓÁÐͬ²½Æ÷£¬Ï൱ÓÚÒ»¸öÄ£°å£¬Àà¿âÖÐReentantLockµÈ¶¼ÊÇͨ¹ýËüÀ´ÊµÏֵġ£

AQSµÄºËÐÄÔ­Àí£º

ά»¤Ò»¸övolatile state×÷ÎªËø±êÖ¾¼ÆÊý£¬Í¬Ê±Î¬»¤Ò»¸öNodeÁ´±í×÷ΪµÈ´ý½Úµã¶ÓÁУ¬ËøµÄÇëÇóÊÍ·ÅÁ÷³ÌÈçÏ£º

Ö÷ÒªµÄÁ÷³Ì¾ÍÊÇÕâô¼òµ¥£¬µ±È»Òª¿´´úÂëʵÏÖϸ½Ú°üÀ¨ºÜ¶àϸ½Ú£º¹«Æ½Ëø/·Ç¹«Æ½ËøµÄÇø±ð¡¢³¬Ê±»úÖÆµÄʵÏÖ¡¢NodeÁ´±íµÄÉÚ±ø¼¼ÇÉ¡¢NodeµÄ×´Ì¬Ç¨ÒÆ¡¢¹²ÏíËøµÄʵÏÖ¡¢¶ÁÐ´Ëø¸ßµÍλµÄ¼¼Çɵȣ¬Æäʵ¾ÍÊÇij¼¸ÐдúÂëµÄÇø±ð£¬Ä§¹íÔÚϸ½ÚÀïÃæ¡£ConditionµÄʵÏÖºÍËø±¾Éí¶ÓÁеÄά»¤ÀàËÆ£¬¾Í²»¶à×ö׸ÊöÁË¡£

×ÛÉÏ

JavaÖеÄḬ̈߳²È«´ÓJMM£¬µ½Í¬²½»úÖÆµÄʵÏÖ£¬ÕûÌå¾ÍÓиö´óÖµÄÓ¡ÏóÁË£¬Ï´ÎÔÙ·ÖÎö·ÖÎöḬ̈߳²È«ÈÝÆ÷ºÍÏ̳߳صÄʵÏÖ°É£¬Ï²»¶µÄµã¸öÔÞÓ´~

 

 

 
   
2135 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

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

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

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢