JavaÄÚ´æÄ£ÐÍ
ÔÚÁ˽âJavaµÄͬ²½ÃØÃÜ֮ǰ£¬ÏÈÀ´¿´¿´JMM(Java Memory Model)¡£
Java±»Éè¼ÆÎª¿çƽ̨µÄÓïÑÔ£¬ÔÚÄÚ´æ¹ÜÀíÉÏ£¬ÏÔȻҲҪÓÐÒ»¸öͳһµÄÄ£ÐÍ¡£¶øÇÒJavaÓïÑÔ×î´óµÄÌØµã¾ÍÊǷϳýÁËÖ¸Õ룬°Ñ³ÌÐòÔ±´ÓÍ´¿àÖнâÍѳöÀ´£¬²»ÓÃÔÙ¿¼ÂÇÄÚ´æÊ¹Óú͹ÜÀí·½ÃæµÄÎÊÌâ¡£
¿ÉϧÊÀÊÂ×ܲ»¾¡ÈçÈËÒ⣬ËäÈ»JMMÉè¼ÆÉÏ·½±ãÁ˳ÌÐòÔ±£¬µ«ÊÇËüÔö¼ÓÁËÐéÄâ»úµÄ¸´Ôӳ̶ȣ¬¶øÇÒ»¹µ¼ÖÂijЩ±à³Ì¼¼ÇÉÔÚJavaÓïÑÔÖÐʧЧ¡£
JMMÖ÷ÒªÊÇΪÁ˹涨ÁËÏ̺߳ÍÄÚ´æÖ®¼äµÄһЩ¹ØÏµ¡£¶ÔJava³ÌÐòÔ±À´ËµÖ»Ð踺ÔðÓÃsynchronizedͬ²½¹Ø¼ü×Ö£¬ÆäËüÖîÈçÓëÏß³Ì/ÄÚ´æÖ®¼ä½øÐÐÊý¾Ý½»»»/ͬ²½µÈ·±Ëö¹¤×÷¾ùÓÉÐéÄâ»ú¸ºÔðÍê³É¡£Èçͼ1Ëùʾ£º¸ù¾ÝJMMµÄÉè¼Æ£¬ÏµÍ³´æÔÚÒ»¸öÖ÷ÄÚ´æ(Main Memory)£¬JavaÖÐËùÓбäÁ¿¶¼´¢´æÔÚÖ÷´æÖУ¬¶ÔÓÚËùÓÐÏ̶߳¼Êǹ²ÏíµÄ¡£Ã¿ÌõÏ̶߳¼ÓÐ×Ô¼ºµÄ¹¤×÷ÄÚ´æ(Working Memory)£¬¹¤×÷ÄÚ´æÖб£´æµÄÊÇÖ÷´æÖÐijЩ±äÁ¿µÄ¿½±´£¬Ï̶߳ÔËùÓбäÁ¿µÄ²Ù×÷¶¼ÊÇÔÚ¹¤×÷ÄÚ´æÖнøÐУ¬Ïß³ÌÖ®¼äÎÞ·¨Ï໥ֱ½Ó·ÃÎÊ£¬±äÁ¿´«µÝ¾ùÐèҪͨ¹ýÖ÷´æÍê³É¡£
ͼ1 JavaÄÚ´æÄ£ÐÍʾÀýͼ
Ïß³ÌÈôÒª¶Ôij±äÁ¿½øÐвÙ×÷£¬±ØÐë¾¹ýһϵÁв½Ö裺Ê×ÏÈ´ÓÖ÷´æ¸´ÖÆ/Ë¢ÐÂÊý¾Ýµ½¹¤×÷Äڴ棬ȻºóÖ´ÐдúÂ룬½øÐÐÒýÓÃ/¸³Öµ²Ù×÷£¬×îºó°Ñ±äÁ¿ÄÚÈÝд»ØMain Memory¡£JavaÓïÑԹ淶(JLS)ÖжÔÏ̺߳ÍÖ÷´æ»¥²Ù×÷¶¨ÒåÁË6¸öÐÐΪ£¬·Ö±ðΪload£¬save£¬read£¬write£¬assignºÍuse£¬ÕâЩ²Ù×÷ÐÐΪ¾ßÓÐÔ×ÓÐÔ£¬ÇÒÏ໥ÒÀÀµ£¬ÓÐÃ÷È·µÄµ÷ÓÃÏȺó˳Ðò¡£¾ßÌåµÄÃèÊöÇë²Î¼ûJLSµÚ17Õ¡£
ÎÒÃÇÔÚÇ°ÃæµÄÕ½ڽéÉÜÁËsynchronizedµÄ×÷Óã¬ÏÖÔÚ£¬´ÓJMMµÄ½Ç¶ÈÀ´ÖØÐÂÉóÊÓsynchronized¹Ø¼ü×Ö¡£
¼ÙÉèijÌõÏß³ÌÖ´ÐÐÒ»¸ösynchronized´úÂë¶Î£¬Æä¼ä¶Ôij±äÁ¿½øÐвÙ×÷£¬JVM»áÒÀ´ÎÖ´ÐÐÈç϶¯×÷£º
(1) »ñȡͬ²½¶ÔÏómonitor (lock)
(2) ´ÓÖ÷´æ¸´ÖƱäÁ¿µ½µ±Ç°¹¤×÷ÄÚ´æ (read and load)
(3) Ö´ÐдúÂ룬¸Ä±ä¹²Ïí±äÁ¿Öµ (use and assign)
(4) Óù¤×÷ÄÚ´æÊý¾ÝË¢ÐÂÖ÷´æÏà¹ØÄÚÈÝ (store and write)
(5) ÊÍ·Åͬ²½¶ÔÏóËø (unlock)
¿É¼û£¬synchronizedµÄÁíÍâÒ»¸ö×÷ÓÃÊDZ£Ö¤Ö÷´æÄÚÈݺÍÏ̵߳Ť×÷ÄÚ´æÖеÄÊý¾ÝµÄÒ»ÖÂÐÔ¡£Èç¹ûûÓÐʹÓÃsynchronized¹Ø¼ü×Ö£¬JVM²»±£Ö¤µÚ2²½ºÍµÚ4²½»áÑϸñ°´ÕÕÉÏÊö´ÎÐòÁ¢¼´Ö´ÐС£ÒòΪ¸ù¾ÝJLSÖеĹ涨£¬Ï̵߳Ť×÷ÄÚ´æºÍÖ÷´æÖ®¼äµÄÊý¾Ý½»»»ÊÇËÉñîºÏµÄ£¬Ê²Ã´Ê±ºòÐèҪˢй¤×÷ÄÚ´æ»òÕ߸üÐÂÖ÷ÄÚ´æÄÚÈÝ£¬¿ÉÒÔÓɾßÌåµÄÐéÄâ»úʵÏÖ×ÔÐоö¶¨¡£Èç¹û¶à¸öÏß³ÌͬʱִÐÐÒ»¶Îδ¾synchronized±£»¤µÄ´úÂë¶Î£¬ºÜÓпÉÄÜijÌõÏß³ÌÒѾ¸Ä¶¯Á˱äÁ¿µÄÖµ£¬µ«ÊÇÆäËûÏß³ÌÈ´ÎÞ·¨¿´µ½Õâ¸ö¸Ä¶¯£¬ÒÀÈ»ÔھɵÄ
Ïà¹ØÎĵµ£º
Ò»¡¢ ¶¨Òå
·ÅÔÚÒ»¸öÀàµÄÄÚ²¿µÄÀàÎÒÃǾͽÐÄÚ²¿Àà¡£
¶þ¡¢ ×÷ÓÃ
1.ÄÚ²¿Àà¿ÉÒԺܺõÄʵÏÖÒþ²Ø,Ò²¾ÍÊÇ·â×°ÐÔ¡£Ò»°ãµÄ·ÇÄÚ²¿À࣬ÊDz»ÔÊÐíÓÐ private ÓëprotectedȨÏ޵쬵«ÄÚ²¿Àà¿ÉÒÔ
2.ÄÚ²¿ÀàÓµÓÐÍâΧÀàµÄËùÓÐÔªËØµÄ·ÃÎÊȨÏÞ
3.¿ÉÊÇʵÏÖ¶àÖØ¼Ì³Ð
4.¿ÉÒÔ±ÜÃâÐ޸ĽӿڶøÊµÏÖͬһ¸öÀàÖÐÁ½ÖÖͬÃû·½·¨µÄµ÷ÓÃ
Èý¡¢  ......
JavaỊ̈߳ºÏß³Ì״̬µÄת»»
SCJP5ѧϰ±Ê¼Ç
Ò»¡¢Ïß³Ì״̬
Ï̵߳Ä״̬ת»»ÊÇÏ߳̿ØÖƵĻù´¡¡£Ïß³Ì״̬×ܵĿɷÖΪÎå´ó״̬£º·Ö±ðÊÇÉú¡¢ËÀ¡¢¿ÉÔËÐС¢ÔËÐС¢µÈ´ý/×èÈû¡£ÓÃÒ»¸öͼÀ´ÃèÊöÈçÏ£º
1¡¢ÐÂ״̬£ºÏ̶߳ÔÏóÒѾ´´½¨£¬»¹Ã»ÓÐÔÚÆäÉϵ÷ÓÃstart()·½·¨¡£
2¡¢¿ÉÔËÐÐ״̬£ºµ±Ïß³ÌÓÐ× ......
JavaỊ̈߳ºÏ̵߳ĵ÷¶È-ºÏ²¢
Ï̵߳ĺϲ¢µÄº¬Òå¾ÍÊǽ«¼¸¸ö²¢ÐÐÏ̵߳ÄÏ̺߳ϲ¢ÎªÒ»¸öµ¥Ïß³ÌÖ´ÐУ¬Ó¦Óó¡¾°Êǵ±Ò»¸öÏ̱߳ØÐëµÈ´ýÁíÒ»¸öÏß³ÌÖ´ÐÐÍê±Ï²ÅÄÜÖ´ÐÐʱ¿ÉÒÔʹÓÃjoin·½·¨¡£
joinΪ·Ç¾²Ì¬·½·¨£¬¶¨ÒåÈçÏ£º
void join()
µÈ´ý¸ÃÏß³ÌÖÕÖ¹¡£ ......
JavaỊ̈߳ºÏ̵߳ĵ÷¶È-ÊØ»¤Ïß³Ì
ÊØ»¤Ïß³ÌÓëÆÕͨÏß³Ìд·¨ÉÏ»ù±¾Ã´É¶Çø±ð£¬µ÷ÓÃÏ̶߳ÔÏóµÄ·½·¨setDaemon(true)£¬Ôò¿ÉÒÔ½«ÆäÉèÖÃÎªÊØ»¤Ï̡߳£
ÊØ»¤Ïß³ÌʹÓõÄÇé¿ö½ÏÉÙ£¬µ«²¢·ÇÎÞÓ㬾ÙÀýÀ´Ëµ£¬JVMµÄÀ¬»ø»ØÊÕ¡¢ÄÚ´æ¹ÜÀíµÈÏ̶߳¼ÊÇÊØ»¤Ï̡߳£»¹ÓоÍÊÇÔÚ×öÊý¾Ý¿âÓ¦ÓÃʱºò£¬Ê¹ÓõÄÊý¾Ý¿âÁ¬½Ó³Ø£¬Á¬½Ó³Ø±¾ÉíÒ²°üº ......
Java™ ÓïÑÔ°üº¬Á½ÖÖÄÚÔÚµÄͬ²½»úÖÆ£ºÍ¬²½¿é(»ò·½·¨)ºÍ volatile ±äÁ¿¡£ÕâÁ½ÖÖ»úÖÆµÄÌá³ö¶¼ÊÇΪÁËʵÏÖ´úÂëÏ̵߳ݲȫÐÔ¡£ÆäÖÐ Volatile ±äÁ¿µÄͬ²½ÐԽϲî(µ«ÓÐʱËü¸ü¼òµ¥²¢ÇÒ¿ªÏú¸üµÍ)£¬¶øÇÒÆäʹÓÃÒ²¸üÈÝÒ׳ö´í¡£
¡¡¡¡Ì¸¼°µ½volatile¹Ø¼ü×Ö£¬²»µÃ²»ÌáµÄһƪÎÄÕÂÊÇ£º¡¶Java ÀíÂÛÓëʵ¼ù: ÕýȷʹÓà Volatile ±äÁ¿¡·£¬ÕâÆ ......