日志正文
|
||
在java中,可以声明一个变量为ThreadLocal型,声明这样的变量,因为不用重复的new,因此可以提升性能,下面是测试示例: package com.taobao.danchen.threadlocal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class PerformanceTest { private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; /** * @param args */ public static void main(String[] args) { int loop=100000; Date date=new Date(); long start=System.currentTimeMillis(); for(int i=0;i<loop;i++){ DateUtil.format(date); } long end=System.currentTimeMillis(); System.out.println("ThreadLocal:"+(end-start)+"ms"); start=System.currentTimeMillis(); for(int i=0;i<loop;i++){ DateFormat df=new SimpleDateFormat(DATE_FORMAT); df.format(date); } end=System.currentTimeMillis(); System.out.println("Normal:"+(end-start)+"ms"); } } 测试结果: ThreadLocal:269ms Normal:764ms package com.taobao.danchen.threadlocal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * ThreadLocal的用法 * @author danchen * */ public class DateUtil { private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static ThreadLocal<DateFormat> threadLocalDateFormat = new ThreadLocal<DateFormat>(){ protected synchronized DateFormat initialValue() { return new SimpleDateFormat(DATE_FORMAT); } }; public static DateFormat getDateFormat() { return threadLocalDateFormat.get(); } public static Date parse(String textDate) throws ParseException{ return getDateFormat().parse(textDate); } public static String format(Date date){ return getDateFormat().format(date); } } 这里还有另外一种写法: /** * 第二种写法 * @author danchen * */ public class DateUtil2 { private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static ThreadLocal<DateFormat> threadLocalDateFormat = new ThreadLocal<DateFormat>(); public static DateFormat getDateFormat() { if(threadLocalDateFormat.get()==null){ DateFormat df=new SimpleDateFormat(DATE_FORMAT); threadLocalDateFormat.set(df); return df; } return threadLocalDateFormat.get(); } public static Date parse(String textDate) throws ParseException{ return getDateFormat().parse(textDate); } public static String format(Date date){ return getDateFormat().format(date); } } 关于什么是threadlocal,可以参见oracle文档: http://docs.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html
阅读(?)评论(0)
上一篇: jdk中的线程池
下一篇:java中两种常见的序列化方式
|
||
评论 想第一时间抢沙发么?