c# – ThreadStatic,ThreadLocal,GetData优于为线程创建对象实例的优势是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ThreadStatic,ThreadLocal,GetData优于为线程创建对象实例的优势是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2089字,纯文字阅读大概需要3分钟。
内容图文
![c# – ThreadStatic,ThreadLocal,GetData优于为线程创建对象实例的优势是什么?](/upload/InfoBanner/zyjiaocheng/794/98e9e9ccd73441e7875a7b55e3738cc1.jpg)
一位朋友问我哪个更好ThreadStatic或ThreadLocal.检查文档我告诉他ThreadLocal看起来更方便,从.NET 4.0开始可用,但我不明白为什么使用它们中的任何一个而不是为线程创建对象实例.它们的目的是存储“线程本地数据”,因此您可以不那么笨拙地调用方法,并避免在某些情况下锁定.当我想要这样的线程本地数据时,我总是创建类似于:
class ThreadHandler { SomeClass A; public ThreadHandler(SomeClass A) { this.A = A; } public void Worker() { } }
如果我只想点火并忘记线程它将是新的Thread(新的ThreadHandler(新的SomeClass()).TheWorkerMethod).Start(),如果我想跟踪线程它可以添加到集合中,如果我想跟踪数据ThreadHandler可以添加到集合中,如果我想同时处理我可以为ThreadHandler创建Thread属性并将ThreadHandler放入集合,我想要线程池它是QueueUserWorkItem而不是新的Thread().如果范围很简单,它简短而简单,但如果范围变宽,则可以轻松扩展.
当我试图谷歌为什么在一个对象实例上使用ThreadLocal时,我的所有搜索最终都解释了ThreadLocal是如何比ThreadStatic大得多的,在我看来,人们解释说他们有这个笨拙的螺丝刀,但现在工具箱里有重型猴子 – 扳手更方便锤击钉子.虽然工具箱开始使用锤子.
我理解我错过了什么,因为如果ThreadStatic / ThreadLocal没有优势,他们就不会存在.有人可以指出ThreadLocal的至少一个重要优势是为线程创建一个对象实例吗?
UPD:看起来像是this的两倍,我想我在谷歌上搜索“java”关键字时就把我抛弃了.因此,至少有一个优势 – ThreadLocal更适合与任务并行库一起使用.
解决方法:
I don’t get advantage of ThreadLocal over creating an instance of object for a thread.
你是对的,当你控制正在创建的线程以及如何使用它们时,将整个线程包装在一个帮助器类中是非常方便的,并让它从那里获得“线程局部”数据.
问题是,特别是在体制性大的项目中,你并不总是有这种控制.您可以启动一个线程,并调用一些代码,并且一个线程可以通过调用数百万行代码分散在3个内部团队和一个外部承包商团队拥有的10个项目之间.祝你好运,随处可见一些参数.
线程本地存储允许这些人进行交互,而不需要他们对表示该线程上下文的对象有明确的引用.
我遇到的一个相关问题是将数据与某个线程以及该线程创建的每个子线程相关联(因为我的大型项目创建了自己的线程,因此线程本地不再起作用),请参阅我的问题:Is there any programmable data that is automatically inherited by children Thread objects?
在一天结束时,它通常是懒惰的编程,但有时你会发现你需要它的情况.
内容总结
以上是互联网集市为您收集整理的c# – ThreadStatic,ThreadLocal,GetData优于为线程创建对象实例的优势是什么?全部内容,希望文章能够帮你解决c# – ThreadStatic,ThreadLocal,GetData优于为线程创建对象实例的优势是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。