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 方法中正确设置了值..

但它发生的事情是,当我尝试在单独的线程中获取它的值时,即使设置值名称更改为 null。

ex: "myval" changed to "null"

我怎么解决这个问题

4

1 回答 1

5

根据定义,如果您从另一个线程访问它,您将获得一个不相关的值 - 即第二个线程的“本地”值。最好将数据存储在与它相关的上下文中,而不是在线程的上下文中 -特别是如果这实际上类似于 ASP.NET(它不保证在整个持续时间内使用相同的线程的请求)。例如,(回到 ASP.NET)请求具有允许存储任意键值对的上下文。

于 2013-04-09T13:24:18.583 回答