<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    日出星辰

    線程學習筆記【5】--ThreadLocal應用

    基本的ThreadLocal使用

    public class ThreadLocalTest {

    static ThreadLocal tl=new ThreadLocal();
    public static void main(String[] args) {

    for(int i=0;i<2;i++){
    new Thread(new Runnable(){
    int data =new Random().nextInt();
    public void run() {
    System.out.println(Thread.currentThread().getName()
    +"存入的數據是 "+data);
    tl.set(data);
    //存到了當前線程
    new A().getThreadData();
    }
    }).start();
    }
    }
    static class A{ //靜態類相當于一個外部類
    public void getThreadData(){
    System.out.println(
    "data is "+tl.get());
    }
    }
    }

    結果可能是

    Thread-0存入的數據是 1997234255
    Thread-1存入的數據是 267171693
    data is 1997234255
    data is 267171693

    通過包裝對象非常爛的使用方式

    class MyThreadScopeData{
    private String name;
    private int age;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    }

     

    public class ThreadLocalTest {
    static ThreadLocal<MyThreadScopeData> myThreadScopeData=
    new ThreadLocal<MyThreadScopeData>();
    public static void main(String[] args) {

    for(int i=0;i<2;i++){
    new Thread(new Runnable(){
    int data =new Random().nextInt();
    public void run() {
    MyThreadScopeData mydata
    =new MyThreadScopeData();
    mydata.setName(
    "name is name"+data);
    mydata.setAge(data);
    //把對象存入ThreadLocal 這樣的做法非常爛!!!!!
    myThreadScopeData.set(mydata);
                      new B().showThreadScopeData();

    }
    }).start();
    }
    }


    static class B{
    public void showThreadScopeData(){
    System.out.println(myThreadScopeData.get().getName());
    System.out.println(
    "age is "+myThreadScopeData.get().getAge());
    }
    }

    }

    }

    標準使用方式

    /**
    * 單列線程
    * 在線程中范圍內任意地方調,得到都是同一個實例對象
    * 把ThreadLocal封裝到單列的內部
    */
    class ThreadSingle{
    private ThreadSingle(){}
    public static ThreadLocal<ThreadSingle> map=new ThreadLocal<ThreadSingle>();
    //不需要加synchronized,即便有第2個線程進入,但拿到的map.get()是獨有的。
    public static ThreadSingle getThreadInstance(){ //方法得到是與本線程相關的實例
    ThreadSingle obj=map.get();
    /**
    * 如果A進入時obj=null,剛創建完還沒賦值,此時B線程進入,但B和A沒有關系。
    */
    if(obj==null){
    obj
    =new ThreadSingle();
    map.set(obj);
    }
    return obj;
    }
    private String name;
    private int age;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }

    }

     

     

    public class ThreadLocalTest {
    
    	public static void main(String[] args) {
    
    		for(int i=0;i<2;i++){
    			new Thread(new Runnable(){
    				int data =new Random().nextInt();
    				public void run() {						
    					ThreadSingle.getThreadInstance().setName("name"+data);
    					ThreadSingle.getThreadInstance().setAge(data);
    					new C().showData();
    				}
    			}).start();
    		}
    	}
    

     

     

     

     

     

     

     

    posted on 2011-09-05 15:31 日出星辰 閱讀(133) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日本大片在线看黄a∨免费| 精品熟女少妇aⅴ免费久久| 真实国产乱子伦精品免费| 亚洲综合AV在线在线播放| 无码的免费不卡毛片视频| 国产美女无遮挡免费网站| 自拍偷自拍亚洲精品播放| 国产精品久久久久影院免费| 国产精品亚洲综合一区在线观看| 国产一级高清免费观看| 免费大学生国产在线观看p| 亚洲AV女人18毛片水真多| 高清在线亚洲精品国产二区| 亚洲人成网站在线观看播放| 中文字幕无码免费久久9一区9 | 国产无遮挡又黄又爽免费网站| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 久久美女网站免费| 亚洲高清在线观看| 国产成人精品免费视| 亚洲国产成人久久一区久久| 亚洲成av人片在线看片| 免费大片黄在线观看yw| 国产成人人综合亚洲欧美丁香花 | 亚洲第一网站男人都懂| 岛国岛国免费V片在线观看| 亚洲嫩模在线观看| 成人免费淫片在线费观看| 免费夜色污私人影院网站| 亚洲第一中文字幕| 成人人免费夜夜视频观看| 亚洲精品国产日韩无码AV永久免费网 | 中文字幕免费播放| 在线免费观看亚洲| caoporn成人免费公开| 亚洲综合无码一区二区| 一区二区三区观看免费中文视频在线播放 | 1区1区3区4区产品亚洲| 国产特级淫片免费看| 免费无码又爽又刺激网站| 亚洲偷偷自拍高清|