锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
ThreadLocal寰堝鏄撹浣跨敤鑰呰瑙?浠ュ墠鎴戝氨璇В浜?錛屽洜涓哄湪榪欎釜綾諱腑瀹氫箟浜?jiǎn)涓涓潤(rùn)鎬佺殑鍖呯駭鍙鐨勫唴閮ㄧ被ThreadLocalMap錛屽悓鏃禩hreadLocal瀵瑰鎻愪緵浜?jiǎn)get鍜宻et鏂規(guī)硶銆傞偅涔坰et鐨勬椂鍊欏氨鏄妸褰撳墠綰跨▼瀵硅薄浣滀負(fù)ThreadLocalMap鐨刱ey錛屾妸浼犲叆set鏂規(guī)硶鐨勫間綔涓簐alue瀛樺偍璧鋒潵錛沢et鐨勬椂鍊欓氳繃鑾峰彇褰撳墠綰跨▼瀵硅薄錛岀劧鍚庡埌ThreadLocalMap涓彇寰楀搴旂殑value銆傝繖縐嶈璇嗘槸琛ㄩ潰鐨勫緢瀹規(guī)槗鐞嗚В鐨勬柟寮忥紝浣嗘槸涔熸槸閿欒鐨勭悊瑙c?/font>
姣忎釜Thread綾諱腑閮芥湁ThreadLocal.ThreadLocalMap鐨勪袱涓垚鍛橈紝鍒嗗埆鏄痶hreadlocals涓巌nheritableThreadLocals銆傚墠鑰呯敤鏉ュ瓨鍌ㄥ綋鍓嶇嚎紼嬬殑鐩稿叧鏁版嵁淇℃伅錛屽悗鑰呯敤鏉ュ瓨鍌ㄤ粠鐖剁嚎紼嬩腑緇ф壙鎴栬呰鎷瘋礉榪囨潵鐨勭浉鍏蟲暟鎹俊鎭傝繖涓や釜鍖哄煙涔熷氨鏄墠闈㈡彁鍒扮殑綰跨▼鐨勭壒鍒瓨鍌ㄥ尯鍩燂紝浣嗘槸濡備綍鎿嶄綔瀹冧滑錛烰DK涓殑璁捐騫朵笉鏄鐢ㄦ埛鐩存帴鎿嶄綔褰撳墠綰跨▼鏉ュ瓨鍙栨暟鎹紝鑰屾槸璁╃敤鎴鋒搷浣淭hreadLocal鏉ュ褰撳墠綰跨▼鐨勮繖涓や釜Map榪涜瀛樺彇(涓漢璁や負(fù)榪欐牱璁捐鏄嚭浜庡畨鍏ㄦт笌鏄撶敤鎬ц冭檻錛屼富瑕佹槸Map涓殑key鍊奸渶瑕佸浐瀹氭墠鑳藉彇鍒板悓涓瀵硅薄)錛屽悓鏃舵斁緗湪榪欎袱涓狹ap涓殑key鍊煎氨鏄疶hreadLocal瀵硅薄鑷韓錛寁alue鐢辯敤鎴蜂紶鍏ャ?/font>
ThreadLocal涓虹嚎紼嬬嫭鍗犳煇浜涘璞℃垨鑰呰祫婧愭彁渚涗簡(jiǎn)鏂扮殑鎵嬫錛孴hreadLocal涓庣嚎紼嬪爢鏍堥兘鏄敤鏉ュ瓨鍙栫嚎紼嬬鏈夋暟鎹殑鍖哄煙錛屽埆鐨勭嚎紼嬫棤娉曡Е紕拌繖涓や釜鍖哄煙錛屼絾鏄簩鑰呯‘鏈変笉鍚岀殑鐢熷懡鍛ㄦ湡銆傝繖涓彲浠ヨ繖鏍風(fēng)悊瑙o紝綰跨▼璺ㄥ涓柟娉曡皟鐢ㄧ殑鏃跺欙紝鏂規(guī)硶浣滀負(fù)Frame涓嶆柇鐨勮繘鏍堝拰鍑烘爤(鏂規(guī)硶鐨勮皟鐢ㄤ笌榪斿洖)錛屽悓鏃跺嚭鏍堢殑鏃跺欐柟娉曚腑鐨勪復(fù)鏃跺彉閲忔暟鎹細(xì)琚洖鏀訛紝鍦ㄨ繖涓嚎紼嬬殑鍫嗘爤涓秷澶憋紝鎵浠ユ柟娉曚腑鐨勫眬閮ㄥ彉閲忔槸鏃犳硶鍦ㄧ嚎紼嬭皟鐢ㄨ繃紼嬩腑絀塊忥紝闄ら潪鏄紶閫掑眬閮ㄧ殑寮曠敤綾誨瀷鍙橀噺錛屼絾鏄繖涔熸剰鍛崇潃鏂規(guī)硶鎺ュ彛閮借棰濆鎺ユ敹鏂扮殑鍙傛暟(鏃╂湡緋葷粺涓紶閫扟DBC鏁版嵁搴撹繛鎺ョ殑鏂瑰紡)銆傝孴hreadLocal涓嶅悓錛屽噯紜湴璇存槸綰跨▼涓殑ThreadLocalMap涓嶅悓錛岀嚎紼嬪璞′腑鐨凾hreadLocalMap瀵硅薄鏄即闅忔暣涓嚎紼嬪璞$敓鍛藉懆鏈熺殑錛岀嚎紼嬪彲浠ュ湪浠諱綍闇瑕佺殑鏃跺欓氳繃瀹冩潵鑾峰彇鐩稿叧鏁版嵁錛岃繖涓虹嚎紼嬬嫭鍗犳暟鎹彁渚涗簡(jiǎn)涓縐嶆洿鍔犱紭闆呯殑鏂瑰紡銆傚彧涓嶈繃榪欎竴鍒囬兘鏄氳繃ThreadLocal鏉ユ搷浣滅殑鑰屽凡錛屽悓鏃禩hreadLocal鑷韓涔熶綔涓轟笉鍚岀嚎紼嬩腑鐨凾hreadLocalMap涓殑key鏉ユ槧灝勫瓨鍏ョ殑value銆?br />
public class ThreadWriter
{
private static final ThreadLocal<FileWriter> local = new
ThreadLocal<FileWriter>();
public void write(String s)
{
try
{
getFileWriter().write(s);
}
catch(IOException e)
{
//igore
}
}
private FileWriter getFileWriter()
{
FileWriter fw = local.get();
if (null == fw)
{
try
{
fw = new FileWriter(Thread.currentThread().getName() + "-info.txt", true);
local.set(fw);
}
catch(IOException e)
{
//igore
}
}
return fw;
}
} 榪欓噷璇存槑鍑犱釜闂錛?/font>
1銆?nbsp;ThreadLocal瀵硅薄鍙湁涓浠斤紝瀹冨皢浣滀負(fù)涓嶅悓綰跨▼涓殑ThreadLocalMap瀵硅薄鐨刱ey錛屾墍鏄犲皠鐨勫兼槸涓嶅悓鏂囦歡璺緞鐨凢ileWriter瀵硅薄銆傚彧涓嶈繃涓嶅悓 綰跨▼涓殑ThreadLocalMap涓殑key鍊奸兘涓鏍鳳紝浣嗘槸鍥犱負(fù)鍦ㄤ笉鍚岀殑ThreadLocalMap涓紝涓嶄細(xì)鏈変換浣曞獎(jiǎng)鍝嶏紝鍙嶈岃繖鏍風(fēng)殑鏂瑰紡涓烘瘡涓嚎紼嬩腑ThreadLocalMap瀵硅薄涓殑key鍊肩敓鎴愮渷鍘諱簡(jiǎn)寰堝鍔熷か錛岃繖鏄竴涓緢綺懼鐨勮璁★紝鐢ㄦ埛鍦ㄩ棿鎺ヤ嬌鐢═hreadLocalMap鐨勬椂鍊欙紝涓嶉渶瑕佹劅鐭ey鏄粈涔堬紝灝卞彲浠ユ柟渚垮湴瀛樺彇銆?/font>
2銆?nbsp;涓浠絋hreadLocal瀵硅薄鍙兘鏄犲皠涓縐嶈祫婧愩傚闇瑕佹槧灝勫縐嶈祫婧愮殑璇濓紝瀹氫箟澶氫釜ThreadLocal鎴愬憳銆?/font>
3銆?local.set(fw); 榪欏彞浠g爜琛ㄧず灝唋ocal鑷韓浣滀負(fù)key錛宖w浣滀負(fù)value錛屽瓨鍌ㄥ湪璋冪敤榪欒浠g爜鐨勭嚎紼嬩腑鐨凾hreadLocalMap瀵硅薄涓?/font>
FileWriter fw = local.get(); 榪欏彞浠g爜琛ㄧず灝唋ocal鑷韓浣滀負(fù)key錛屼粠褰撳墠綰跨▼鐨凾hreadLocalMap瀵硅薄涓彇鍑哄睘浜庤嚜宸辯嫭鍗犵殑FileWriter瀵硅薄銆?/font>
ThreadLocal 榪涢樁
ThreadLocal 搴旂敤
]]>
主站蜘蛛池模板:
武夷山市|
湖州市|
壤塘县|
甘谷县|
徐汇区|
驻马店市|
通化县|
修文县|
鄂托克前旗|
太湖县|
日喀则市|
闽清县|
黎平县|
丽水市|
南雄市|
巧家县|
宜宾县|
环江|
探索|
甘泉县|
绿春县|
石阡县|
开平市|
新巴尔虎右旗|
芜湖县|
扎鲁特旗|
泰兴市|
乐安县|
鄂尔多斯市|
广河县|
东光县|
余庆县|
临汾市|
英山县|
柳林县|
林甸县|
察隅县|
永清县|
望江县|
聊城市|
江川县|