¡¡¡
°ü×°Æ÷ʵÏÖ
¡¡¡¡°ü×°Æ÷ʵÏÖÊÇÒ»ÖÖ½«ËüÃǵÄʵ¼Ê¹¤×÷ίÍиøÒ»¸öÌØ¶¨ ¶ÔÏó¼¯ µÄʵÏÖ£¬ËüÔڸà ¶ÔÏó¼¯ ËùÌṩµÄ¹¦ÄÜÖ®ÉÏÓÖÔö¼ÓÁ˶îÍâµÄ¹¦ÄÜ¡£ ¶Ôdesign patterns£¨Éè¼ÆÑùʽ£©
°®ºÃÕßÀ´Ëµ£¬ÕâÊÇÒ»¸ö decorator£¨ÓÍÆá¹¤£© Ñùʽ¡£ËäÈ»ÓеãÒì¹úÇéµ÷£¬µ«È·Êµ¼òµ¥Ã÷ÁË¡£
¡¡¡¡ÕâЩʵÏÖÊÇÄäÃûµÄ£º²»ÊÇÌṩһ¸ö¹«¹²À࣬JDK Ìṩһ¸ö static factory method£¨¾²Ì¬·½·¨£©¡£ ËùÓÐÕâЩ¶¼¿ÉÒÔÔÚ½ö°üº¬¾²Ì¬·½·¨µÄCollections
API ÖÐÕÒµ½¡£
¡¡¡¡
ͬ²½°ü×°Æ÷£¨Synchronization Wrappers£©
¡¡¡¡Í¬²½°ü×°Æ÷½«×Ô¶¯Í¬²½£¨Ḭ̈߳²È«µÄ£©Ìí¼Óµ½Ò»¸öÈÎÒâµÄ ¶ÔÏ󼯡£6¸ö ºËÐÄ ¶ÔÏó¼¯ ½Ó¿ÚÖеÄÿһ¸ö¶¼¶ÔÓ¦Ò»¸ö¾²Ì¬·½·¨:
public static Collection synchronizedCollection(Collection c);
public static Set synchronizedSet(Set s);
public static List synchronizedList(List list);
public static Map synchronizedMap(Map m);
public static SortedSet synchronizedSortedSet(SortedSet s);
public static SortedMap synchronizedSortedMap(SortedMap m);
¡¡¡¡Ã¿Ò»¸öÕâÑùµÄ·½·¨¶¼·µ»ØÒ»¸öÓÉÌØ¶¨ ¶ÔÏó¼¯ ×÷Ϊºó±¸µÄͬ²½£¨Ḭ̈߳²È«µÄ£©Collection¡£ Ϊ±£Ö¤´®ÐдæÈ¡£¬ËùÓÐ¶Ôºó±¸ ¶ÔÏó¼¯ µÄ´æÈ¡¶¼±ØÐëͨ¹ý·µ»ØµÄ
¶ÔÏó¼¯ À´Íê³É£¬ÕâÒ»µãÊÇÖÁ¹ØÖØÒªµÄ¡£ ±£Ö¤ÕâÒ»µãµÄÒ»¸ö¼ò±ã°ì·¨ÊDz»Òª±£³Ö¶Ôºó±¸ ¶ÔÏó¼¯ µÄÒýÓ㬠´´½¨ÕâÑùµÄͬ²½ ¶ÔÏó¼¯ ÊÇÒ»¸öС¼¼ÇÉ:
List list = Collections.synchronizedList(new ArrayList());
¡¡¡¡Ò»¸öÓÃÕâÖÖ·½Ê½´´½¨µÄ¶ÔÏ󼯣¬Ã¿Ò»±ÈÌØ¶¼ÊÇḬ̈߳²È«µÄ£¬¾ÍÏóVectorMÄÇÑùµÄ"Õý³£"ͬ²½ ¶ÔÏó¼¯ Ò»Ñù¡£ ÔÚÐèÒª²¢·¢´æÈ¡Çé¿öÏ£¬ÔÚ·µ»ØµÄ
¶ÔÏó¼¯ Éϵü´úʱ£¬Óû§¶Ô·µ»ØµÄ ¶ÔÏó¼¯ ×öÊÖ¹¤Í¬²½ÊÇÊ®·Ö±ØÒªµÄ¡£ ÕâÊÇÒòΪµü´úÊÇͨ¹ý¶Ô¶ÔÏó¼¯ µÄ¶àÖØµ÷ÓÃÍê³ÉµÄ£¬Ëü±ØÐë±»±àдΪһ¸öµ¥¶ÀµÄ×îСµ¥Ôª²Ù×÷£¨atomic
operation£©¡£ÔÚÒ»¸ö°ü×°Æ÷ͬ²½µÄ ¶ÔÏó¼¯ Éϵĵü´ú¹ßÓóÌÐòÈçÏÂËùʾ:
Collection c = Collections.synchronizedCollection(myCollection);
synchronized(c) {
Iterator i = c.iterator(); // Must be in the synchronized block!
while (i.hasNext())
foo(i.next());
}