分享

线程静态在对象缓存中的妙用

 昵称10504424 2014-04-09
线程静态标记静态字段的值对于每个线程都是唯一的。简单来说,是只应用在静态字段上,而且对于每一个线程都是独立存储的。

那么,结合对象缓存来说,需求如下:

1、一些工具类,需要占用一定资源,但又不希望太频繁的创建该工具类。

2、需要适应多线程的情况

一个例子就是StringBuilder类,StringBuilder类内部实现使用了char[]来存储字符,我们需要使用StringBuilder来创建字符串,而且希望不太频繁的创建它,避免内存压力。

下面,就是.NET Framework 4.5.1 中对StringBuilderCache的实现:

带完整注释的版本可以参考:http://www./dotnet/4.5.1/System/Text/StringBuilderCache.cs.html

采用StringBuidlerCache类的例子是String.Join方法,可以参考:http://www./dotnet/4.5.1/System/String.cs.html

不得不赞一下,这样的设计非常巧妙。.NET 中程序的执行都在线程中,每个线程都有自己单独的缓存,再也不用担心同步、加锁的问题,而且对于缓存的对象设置了大小限制。

再总结下它的原理:通过线程静态赋予了静态字段在多线程中独立存储的能力,再通过操作该静态字段来存储缓存对象。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多