涓婂懆錛屾垜浠湁鍑犱釜緋葷粺鍙戠敓浜嗙嚎紼嬫閿侊紝瀵艱嚧緋葷粺鐨勮姹傝鎸備綇錛屾棤娉曞搷搴旇姹傘傚悗闈㈡煡浜嗕竴涓嬭闂錛屽師鏉ユ槸鎴戝巶涓涓熀紜緇勪歡涓嬌鐢ㄧ殑閿佸璞′笉涓鑷磋屽鑷翠簡姝婚攣銆?/span>
public class SimpleStore {
private Map sessions = Collections.synchronizedMap(new HashMap());
synchronized public void remove(String sessionID) { //A1
sessions.put(sessionID, ""); //A2
sessions.remove(sessionID);
System.out.println("remove " + sessionID);
}
public void commit(Map attrs, String sessionID, StatusHolder statusHolder) {
System.out.println("commit " + sessionID);
synchronized (sessions) { //B1
remove(sessionID); // B2
}
}
}
涓婇潰浠g爜涓細
private Map sessions = Collections.synchronizedMap(new HashMap());
灝唖essions榪欎釜map鐢蟲槑涓虹嚎紼嬪畨鍏ㄧ殑map,鍒欐搷浣渕ap涓殑浠諱綍鏂規硶鏃訛紝閮戒細鍔犻攣錛屽茍涓斾細閿佷綇sessions瀵硅薄銆?/span> 榪欒浠g爜錛屽垯鍦ㄥ閮ㄧ嚎紼嬭闂畆emove鏂規硶鏃朵細閿佷綇SimpleStore榪欎釜瀵硅薄銆?br /> synchronized public void remove(String sessionID);
鍙互鐪嬪埌錛岀洰鍓嶅湪鍚屼竴涓被鎴栬呮柟娉曚腑錛屾湁涓ゆ妸閿侊紝騫朵笖閿佸璞′笉鏄悓涓涓紝閭d笅闈㈡垜浠湅鐪嬬嚎紼嬫槸鎬庝箞琚閿佷綇鐨勶細
1, 鍋囪A綰跨▼鍏堣皟鐢╮emove鏂規硶錛屽垯榪欐椂浼氭妸simpleStore緇欓攣浣忥紝鐒跺悗鎵цsessions.put(sessionID, “”)鐨勬椂鍊欙紝浼氬皾璇曢攣浣弒essions
2, 鍚屾椂B綰跨▼璋冪敤commit鏂規硶錛屽湪 synchronized (sessions) 鏃訛紝浼氬厛閿佷綇sessions瀵硅薄錛屽茍涓斿湪璋冪敤鎺ヤ笅鏉ョ殑remove()璇曪紝浼氬皾璇曢攣浣?nbsp; SimpleStore瀵硅薄錛岃嚦姝わ紝綰跨▼A鍜岀嚎紼婤緇堜簬鎴愬姛瀹屾垚姝婚攣銆?/span>
鎵浠ュ湪浣跨敤澶氱嚎紼嬫椂涓瀹氳鐗瑰埆娉ㄦ剰錛屼嬌鐢ㄩ攣涓瀹氳娉ㄦ剰浣犵殑閿佸璞℃槸鍚︿竴鑷淬傝涓嶇劧灝辨湁鍙兘姝婚攣浜唦

]]>