2013-04-09 57 views
1

我一直在使用ThreadLocal在一端设置值,并使用get方法在另一端下面的代码检索值是设置线程本地值获得另一个线程

public class sample() 
{  
     public ThreadLocal<Object> tl1 = new ThreadLocal<Object>(); 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      Thread thread = new Thread(new ThreadStart(Myfunction)); 
      setname("myval"); 
      thread.Start(); 
     } 

     public void setname(String name) 
     { 
      tl1.Value = name; 
     } 
     public String getname() 
     { 
      return (String)tl1.Value; 
     } 

     public void Myfunction() 
     { 
      String value=getname(); 
     } 
} 

我这个我已经在setname方法中正确设置了值 ..

但是它发生了什么?

ex: "myval" changed to "null" 

我怎样才能解决这个问题

回答

5

根据定义,如果你从另一个线程访问它,你会得到一个不相关的值 - 即是“局部”的第二个线程的值。这将是最好的数据存储在什么它涉及到,而不是在线程的上下文背景 - 尤其这实际上是一样的东西ASP.NET(它保证使用相同的线程在整个请求期间)。例如(回到ASP.NET),请求的上下文允许存储任意的键值对。