<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()
    +"存入的數(shù)據(jù)是 "+data);
    tl.set(data);
    //存到了當前線程
    new A().getThreadData();
    }
    }).start();
    }
    }
    static class A{ //靜態(tài)類相當于一個外部類
    public void getThreadData(){
    System.out.println(
    "data is "+tl.get());
    }
    }
    }

    結果可能是

    Thread-0存入的數(shù)據(jù)是 1997234255
    Thread-1存入的數(shù)據(jù)是 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());
    }
    }

    }

    }

    標準使用方式

    /**
    * 單列線程
    * 在線程中范圍內(nèi)任意地方調(diào),得到都是同一個實例對象
    * 把ThreadLocal封裝到單列的內(nèi)部
    */
    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,剛創(chuàng)建完還沒賦值,此時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)  編輯  收藏


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 久久乐国产综合亚洲精品| 亚洲电影在线免费观看| 色视频在线观看免费| 蜜桃精品免费久久久久影院| 亚洲六月丁香婷婷综合| 国产成人免费在线| 亚洲国产成人精品久久| 啦啦啦中文在线观看电视剧免费版 | 91精品国产免费久久久久久青草| 亚洲精品自产拍在线观看动漫| 久久精品成人免费观看| 精品亚洲A∨无码一区二区三区| 24小时免费看片| 激情亚洲一区国产精品| 最新69国产成人精品免费视频动漫 | 中文字幕免费视频精品一| 久久亚洲中文字幕精品一区| 成av免费大片黄在线观看| 亚洲AV无码AV男人的天堂| 国产免费女女脚奴视频网| 亚洲国产成人精品无码区二本| 日本免费的一级v一片| 一级美国片免费看| 久久丫精品国产亚洲av不卡 | 成人a视频片在线观看免费| 自拍偷自拍亚洲精品偷一| 国产成人精品亚洲精品| 日本一区二区免费看| 亚洲香蕉久久一区二区三区四区| 麻豆国产入口在线观看免费| 成人久久久观看免费毛片| 香蕉视频在线观看亚洲| 好吊妞788免费视频播放| 国产99视频精品免费视频76| 亚洲日本va午夜中文字幕一区| 久久天天躁狠狠躁夜夜免费观看| 免费VA在线观看无码| 亚洲国产天堂久久综合网站| 免费观看的a级毛片的网站| 中国人免费观看高清在线观看二区| 亚洲精品自在线拍|