当线程池线程完成时,像名称或线程本地数据这样的东西会重置吗?所以当线程下一次从池中出来时,它就像全新的一样?
有没有关于ThreadPool线程这方面的"官方"文档?释放时不清除线程本地存储,这是需要注意的最重要的方面。
http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx当线程池重用一个线程时,它不会清除其中的数据标记的域中的线程本地存储ThreadStaticAttribute属性。因此,数据被放置在一个方法的线程本地存储可以公开给任何其他方法由同一个线程池线程执行。一种方法访问一个带有threadstatiattribute标记的字段属性可能会遇到不同的数据,具体取决于哪个线程
这是一本关于。net(4)中的并行编程和TPL的好书
据我所知没有复位
在链接的文档中提到了如何处理这个问题的方法。
答案是否定的,它不会被重置。但是,您不应该依赖这个事实,因为下一个工作项是在新线程上执行还是在重用的线程上执行,这取决于线程池。因此,您可能会或可能不会再次看到线程本地存储。出于这个原因,我不建议在线程池上使用线程本地存储。线程池的实现是一个内部细节,可能会发生变化。
现实世界的比喻是你每天上班乘坐的公共汽车。假设出于某种原因,你想把包留在公共汽车上,因为你知道它不会被偷。这是个坏主意,因为下次你上公共汽车时,你可能找不到你的包。因为它可以是不同的公交车。车辆段可以在不同的线路之间轮换公交车,也可以处理旧的公交车。就像线程池可能在不让你知道的情况下重用或退出线程。