论坛首页 入门技术论坛

ThreadLoacl的理解与运用

浏览 2561 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-12-11   最后修改:2008-12-19
 public class Student {  
  private int age=0;       
  public int getAge() {  
      return this.age;  
        
  }  
    
   public void setAge(int age) {  
       this.age = age;  
   }  
 }



    public class TreadLocalDemo implements Runnable {  
       private final static  ThreadLocal studentLocal = new ThreadLocal();  
        
       public static void main(String[] agrs) {  
           TreadLocalDemo td = new TreadLocalDemo();  
             Thread t1 = new Thread(td,"a");  
             Thread t2 = new Thread(td,"b");  
             
            t1.start();  
           t2.start();  
   
         }  
        
     
       public void run() {  
            accessStudent();  
        }  
     
       public  void  accessStudent() {  
             
           String currentThreadName = Thread.currentThread().getName();  
           System.out.println(currentThreadName+" is running!");  
           Random random = new Random();  
           int age = random.nextInt(100);  
           System.out.println("thread "+currentThreadName +" set age to:"+age);  
           Student student = getStudent();  
           student.setAge(age);  
           System.out.println("thread "+currentThreadName+" first  read age is:"+student.getAge());  
           try {  
           Thread.sleep(5000);  
           }  
           catch(InterruptedException ex) {  
               ex.printStackTrace();  
           }  
           System.out.println("thread "+currentThreadName +" second read age is:"+student.getAge());  
            
       }  
         
       protected Student getStudent() {  
           Student student = (Student)studentLocal.get();  
          if(student == null) {  
               student = new Student();  
               studentLocal.set(student);  
           }  
           return student;  
       }  
         
       protected void setStudent(Student student) {  
           studentLocal.set(student);  
       }  
  }  



ThreadLocal
    public class ThreadLocal  
    {  
     private Map values = Collections.synchronizedMap(new HashMap());  
     public Object get()  
     {  
      Thread curThread = Thread.currentThread();   
      Object o = values.get(curThread);   
     if (o == null && !values.containsKey(curThread))  
     {  
     o = initialValue();  
     values.put(curThread, o);   
    }  
     return o;   
    }  
     
    public void set(Object newValue)  
    {  
    values.put(Thread.currentThread(), newValue);  
    }  
     
    public Object initialValue()  
    {  
     return null;   
    }  
   }  
   发表时间:2008-12-11  
没什么新意
0 请登录后投票
   发表时间:2008-12-15  
sogood28 写道

没什么新意

        我只是随便写一写,
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics