Java线程静态在对象缓存中的妙用
2014-04-10 11:49
106 查看
线程静态在对象缓存中的妙用由广州疯狂软件教育java培训分享:
线程静态标记静态字段的值对于每个线程都是唯一的。简单来说,是只应用在静态字段上,而且对于每一个线程都是独立存储的。
那么,结合对象缓存来说,需求如下:
1、一些工具类,需要占用一定资源,但又不希望太频繁的创建该工具类。
2、需要适应多线程的情况
一个例子就是StringBuilder类,StringBuilder类内部实现使用了char[]来存储字符,我们需要使用StringBuilder来创建字符串,而且希望不太频繁的创建它,避免内存压力。
下面,就是。NET Framework 4.5.1 中对StringBuilderCache的实现:
internal static class StringBuilderCache{
private const int MAX_BUILDER_SIZE = 360;
[ThreadStatic]
private static StringBuilder CachedInstance;
public static StringBuilder Acquire(int capacity = StringBuilder.DefaultCapacity){
if(capacity <= MAX_BUILDER_SIZE){
StringBuilder sb = StringBuilderCache.CachedInstance;
if (sb != null){
if(capacity <= sb.Capacity){
StringBuilderCache.CachedInstance = null;
sb.Clear();
return sb;
}
}
}
return new StringBuilder(capacity);
}
public static void Release(StringBuilder sb){
if (sb.Capacity <= MAX_BUILDER_SIZE){
StringBuilderCache.CachedInstance = sb;
}
}
public static string GetStringAndRelease(StringBuilder sb){
string result = sb.ToString();
Release(sb);
return result;
}
}
疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼。
疯狂Java在前几年的培训过程中,凭借自身强悍的师资、一流的课程、真实的项目、超高的就业率已经让广大南方学子成功走上软件工程师职业道路。大量毕业即失业的学子已通过疯狂Java实现了就业。
线程静态标记静态字段的值对于每个线程都是唯一的。简单来说,是只应用在静态字段上,而且对于每一个线程都是独立存储的。
那么,结合对象缓存来说,需求如下:
1、一些工具类,需要占用一定资源,但又不希望太频繁的创建该工具类。
2、需要适应多线程的情况
一个例子就是StringBuilder类,StringBuilder类内部实现使用了char[]来存储字符,我们需要使用StringBuilder来创建字符串,而且希望不太频繁的创建它,避免内存压力。
下面,就是。NET Framework 4.5.1 中对StringBuilderCache的实现:
internal static class StringBuilderCache{
private const int MAX_BUILDER_SIZE = 360;
[ThreadStatic]
private static StringBuilder CachedInstance;
public static StringBuilder Acquire(int capacity = StringBuilder.DefaultCapacity){
if(capacity <= MAX_BUILDER_SIZE){
StringBuilder sb = StringBuilderCache.CachedInstance;
if (sb != null){
if(capacity <= sb.Capacity){
StringBuilderCache.CachedInstance = null;
sb.Clear();
return sb;
}
}
}
return new StringBuilder(capacity);
}
public static void Release(StringBuilder sb){
if (sb.Capacity <= MAX_BUILDER_SIZE){
StringBuilderCache.CachedInstance = sb;
}
}
public static string GetStringAndRelease(StringBuilder sb){
string result = sb.ToString();
Release(sb);
return result;
}
}
疯狂软件教育中心依托开发团队的强大技术实力,把企业最新技术融入实训课程,打造金牌的品质,才能给予学员黄金的未来,疯狂软件凭借过硬的技术实力与丰富的项目开发经验,赢得了社会的肯定。疯狂软件Java培训师资力量强大,课程内容深入,为学员高薪就业做了很好的铺垫,拥有丰富就业指导经验的就业团队也成为了学员高薪就业的先天优势。地址:广州天河区车陂沣宏大厦3楼。
疯狂Java在前几年的培训过程中,凭借自身强悍的师资、一流的课程、真实的项目、超高的就业率已经让广大南方学子成功走上软件工程师职业道路。大量毕业即失业的学子已通过疯狂Java实现了就业。
相关文章推荐
- Solr开发
- java.lang.IllegalStateException: Couldn't read row 2, col 4 from CursorWindow.
- eclipse下使用Maven构建一个web项目
- Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
- eclipse的SVN插件安装
- java 基础
- java 3.3 rectangle square
- java学习总结
- eclipse开发项目时的一些常用操作
- Java中Date各种相关用法
- java中synchronized的用法详解
- Java 定时任务
- Eclipse中UML插件的安装(AmaterasUML)
- org.springframework.beans.factory.BeanDefinitionStoreException问题解决
- Eclipse缩进的快捷键是什么?
- 什么是Java垃圾回收器
- JavaEE学习之JAXB
- Java同步、异步相关知识点
- SpringMVC @RequestMapping处理多请求的自我实践
- java日期时间的表现形式的转换,以当前时间命名文件