2013-04-09 55 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),請求的上下文允許存儲任意的鍵值對。