锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久不卡国产精品一区二区,欧美综合精品,午夜天堂影视香蕉久久http://www.aygfsteel.com/liuxiaosan/category/48201.html鎿嶈泲鐨勪漢鐢熷澶勫厖婊$編濡?/description>zh-cnThu, 14 Apr 2011 11:25:20 GMTThu, 14 Apr 2011 11:25:20 GMT60ThreadLocal瑙f瀽http://www.aygfsteel.com/liuxiaosan/articles/347386.htmlliucsliucsThu, 31 Mar 2011 06:05:00 GMThttp://www.aygfsteel.com/liuxiaosan/articles/347386.htmlhttp://www.aygfsteel.com/liuxiaosan/comments/347386.htmlhttp://www.aygfsteel.com/liuxiaosan/articles/347386.html#Feedback0http://www.aygfsteel.com/liuxiaosan/comments/commentRss/347386.htmlhttp://www.aygfsteel.com/liuxiaosan/services/trackbacks/347386.html
鍏堢湅涓涓嬌鐢═hreadLocal鐨勫疄渚嬨?br />

package org.springframework.aop.framework;

import org.springframework.core.NamedThreadLocal;

public abstract class AopContext {

    
private static final ThreadLocal<Object> currentProxy = new NamedThreadLocal<Object>("Current AOP proxy");

    
public static Object currentProxy() throws IllegalStateException {
        Object proxy 
= currentProxy.get();
        
if (proxy == null) {
            
throw new IllegalStateException(
                    
"Cannot find current proxy: Set 'exposeProxy' property on Advised to 'true' to make it available.");
        }
        
return proxy;
    }

    
static Object setCurrentProxy(Object proxy) {
        Object old 
= currentProxy.get();
        
if (proxy != null) {
            currentProxy.set(proxy);
        }
        
else {
            currentProxy.remove();
        }
        
return old;
    }

}

涓婁緥灞曠ず鐨勬槸spring妗嗘灦涓幏鍙栧綋鍓嶇嚎紼嬬殑浠g悊瀵硅薄鐨勬柟娉曪紝AopContext.currentProxy()錛屽湪鏈嚎紼嬬殑紼嬪簭璋冪敤鏍堜腑鍙璋冪敤AopContext鐨勯潤鎬佹柟娉曞氨鍙互鑾峰彇鏈嚎紼嬬浉鍏崇殑浠g悊瀵硅薄銆傚鏋滀笉鐢═hreadLocal錛岄偅涔堣繖涓唬鐞嗗璞″湪鍒涘緩鍚庯紝灝辮涓灞傚眰浼犻掍笅鍘伙紝鎵嶈兘鍦ㄥ悗闈㈣幏鍙栧埌騫朵嬌鐢ㄣ?br /> 閫氳繃榪欎釜渚嬪瓙錛屾垜浠彲浠ョ煡閬揫b]ThreadLocal涓昏鏄彁渚涗簡涓縐嶄繚鎸佸璞$殑鏂規硶浠ュ強閬垮厤浜嗗璞″湪紼嬪簭璋冪敤涓紶閫掔殑綆渚胯闂柟娉曘俆hreadLocal涓庡叡浜暟鎹拰鍚屾娌℃湁鏄庢樉鍏崇郴銆俒/b]

涓嬮潰鐪嬬湅鐩稿叧鐨勬簮鐮佷互浜嗚В鍏蜂綋鐨勭粨鏋勩?br />
public class Thread implements Runnable {
    
// ThreadLocalMap鏄竴涓互ThreadLocal涓簁ey錛孫bject涓哄肩殑map錛岀敱ThreadLocal緇存姢
        ThreadLocal.ThreadLocalMap threadLocals = null;
}

浠嶵hread鐨勬簮鐮佷腑鍙互寰楃煡錛屾槸姣忎竴涓猅hread鎸佹湁涓涓嚜宸辯殑map錛屽茍涓嶆槸涓涓猅hreadLocal鎸佹湁涓涓猰ap銆?br />

public class ThreadLocal<T> {

 
public T get() {
    
// 鑾峰彇褰撳墠綰跨▼
        Thread t = Thread.currentThread();
    
// 鑾峰彇褰撳墠綰跨▼鐨則hreadLocals鍙橀噺
        ThreadLocalMap map = getMap(t);
    
// 浠庡綋鍓嶇嚎紼嬬殑threadLocals鍙橀噺涓彇寰楁湰threadLocal涓簁ey鐨勫?/span>
        if (map != null) {
            ThreadLocalMap.Entry e 
= map.getEntry(this);
            
if (e != null)
                
return (T)e.value;
        }
        
return setInitialValue();
    }
    
     
private T setInitialValue() {
        T value 
= initialValue();
        Thread t 
= Thread.currentThread();
        ThreadLocalMap map 
= getMap(t);
        
if (map != null)
            map.set(
this, value);
        
else
            createMap(t, value);
        
return value;
    }
    
   
     
public void set(T value) {
    
// 鑾峰彇褰撳墠綰跨▼
        Thread t = Thread.currentThread();
    
// 鑾峰彇褰撳墠綰跨▼鐨則hreadLocals鍙橀噺
        ThreadLocalMap map = getMap(t);
    
// 浠ユ湰threadLocal涓簁ey鐨勪繚瀛樺煎埌褰撳墠綰跨▼鐨則hreadLocals鍙橀噺涓幓
        if (map != null)
            map.set(
this, value);
        
else
            createMap(t, value);
    }
    
     ThreadLocalMap getMap(Thread t) {
        
return t.threadLocals;
    }
    
     
void createMap(Thread t, T firstValue) {
        t.threadLocals 
= new ThreadLocalMap(this, firstValue);
    }
}

浣跨敤ThreadLocal榪囩▼錛?瀵逛簬姣忎竴涓渶瑕佺嚎紼嬩繚瀛樿嚜韜疄渚嬬殑鍙橀噺錛岄渶瑕佸畾涔変竴涓潤鎬佺殑ThreadLocal瀹炰緥銆傜劧鍚庡皢涓涓叡鐢ㄧ殑ThreadLocal闈欐佸疄渚嬩綔涓簁ey錛屽皢涓嶅悓瀵硅薄鐨勫紩鐢ㄤ繚瀛樺埌涓嶅悓綰跨▼鐨凾hreadLocalMap涓紝鐒跺悗鍦ㄧ嚎紼嬫墽琛岀殑鍚勫閫氳繃榪欎釜闈欐乀hreadLocal瀹炰緥鐨刧et()鏂規硶鍙栧緱鑷繁綰跨▼淇濆瓨鐨勯偅涓璞°?br /> 姝ゅ錛屾瘡涓嚎紼嬩繚瀛樼殑鑷韓鏁版嵁騫朵笉鏄氳繃澶囦喚鎴栧鍒剁殑錛岃屾槸new鍒涘緩鍑烘潵鐨勩?br />
閫氳繃ThreadLocal鍚勪釜綰跨▼鍙兘鑾峰彇鑷韓瀵瑰簲鐨勬暟鎹紝涓嶈兘璁塊棶鍏朵粬綰跨▼鐨勬暟鎹紝浣嗘槸濡傛灉涓や釜綰跨▼鍦╯et鏃跺紩鐢ㄤ簡鍚屼竴涓暟鎹紝浠嶇劧瀛樺湪鍚屾闂銆?

liucs 2011-03-31 14:05 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 镇平县| 晋宁县| 余干县| 女性| 牡丹江市| 锦州市| 永顺县| 土默特右旗| 壶关县| 江山市| 钦州市| 青海省| 绥德县| 祁连县| 玛沁县| 乐亭县| 饶阳县| 大连市| 武安市| 房产| 师宗县| 资源县| 揭东县| 五指山市| 长泰县| 兴安盟| 东方市| 宁德市| 乌鲁木齐县| 类乌齐县| 甘孜县| 航空| 长沙市| 大埔区| 高雄市| 额敏县| 宁化县| 大渡口区| 吉木乃县| 九江县| 淄博市|