`
小网客
  • 浏览: 1233888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对DateFormat的操作之commons-lang

    博客分类:
  • Java
 
阅读更多

采用的版本如下:

commons-lang-2.5.jar

 

基于commons-lang进行date format的操作代码如下:

		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(System.currentTimeMillis());
		String pattern = "yyyy-MM-dd hh:mm:ss";
		String dateStr = DateFormatUtils.format(calendar, pattern);
		Date date = DateUtils.parseDate(dateStr, new String[] {pattern });
		LOGGER.info("dateStr:" + dateStr);
		LOGGER.info("date:" + date);

 考察 DateFormatUtils.format和DateUtils.parseDate是否线程安全的

通过调用FastDateFormat获取format

    public static String format(Calendar calendar, String pattern, TimeZone timeZone, Locale locale)
    {
        FastDateFormat df = FastDateFormat.getInstance(pattern, timeZone, locale);
        return df.format(calendar);
    }

 同步调用getInstance获取实例

    public static synchronized FastDateFormat getInstance(String pattern, TimeZone timeZone, Locale locale)
    {
        FastDateFormat emptyFormat = new FastDateFormat(pattern, timeZone, locale);
        FastDateFormat format = (FastDateFormat)cInstanceCache.get(emptyFormat);
        if(format == null)
        {
            format = emptyFormat;
            format.init();
            cInstanceCache.put(format, format);
        }
        return format;
    }

 我们发现如果pattern相同那么获取到的FastDateFormat就一定是相同的,那我们就开始问了,是否他是线程安全的呢?是否线程安全取决于如下信息:

1.static的变量是否都是final的
2.static的变量不是final的时候是否会被修改?

 查看源码:

    private static final long serialVersionUID = 1L;
    public static final int FULL = 0;
    public static final int LONG = 1;
    public static final int MEDIUM = 2;
    public static final int SHORT = 3;
    private static String cDefaultPattern;
    private static final Map cInstanceCache = new HashMap(7);
    private static final Map cDateInstanceCache = new HashMap(7);
    private static final Map cTimeInstanceCache = new HashMap(7);
    private static final Map cDateTimeInstanceCache = new HashMap(7);
    private static final Map cTimeZoneDisplayCache = new HashMap(7);
    private final String mPattern;
    private final TimeZone mTimeZone;
    private final boolean mTimeZoneForced;
    private final Locale mLocale;
    private final boolean mLocaleForced;
    private transient Rule mRules[];
    private transient int mMaxLengthEstimate;

 我们发现符合线程安全条件,因此他是线程安全的,只不过解析date的时候采用了自己的一套规则

 

1
1
分享到:
评论

相关推荐

    Java SimpleDateFormat线程安全问题原理详解

    为了解决这个问题,我们可以使用两个方法:使用ThreadLocal或使用第三方工具包commons-lang3。 使用ThreadLocal可以确保每个线程都拥有自己的SimpleDateFormat对象,从而避免线程安全问题。例如: ```java private ...

    开发常用工具类

    - `ThreadUtils`(Apache Commons Lang):提供了线程操作的辅助方法,如启动线程、关闭线程、线程池管理等。 - `ExecutorService` 和 `Future`:Java 并发库中的核心接口,用于管理和控制线程执行。 6. **反射...

    P6Spy的使用.txt

    通过P6Spy可以方便地了解应用程序对数据库的操作细节,帮助开发者优化SQL语句性能。 ##### 2. 添加依赖 为了集成P6Spy,首先需要在项目的构建文件(如Maven的`pom.xml`)中添加P6Spy及相关依赖。例如: ```xml ...

    springboot全局日期格式化的两种方式

    import org.apache.commons.lang.StringUtils; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text...

    javaSE-java-core.pdf

    Apache Commons Lang是Apache软件基金会的一个开源项目,它提供了一些扩展`java.lang`包功能的类,如`StringUtils`,它提供了一系列静态方法用于增强`String`类的功能。`StringBuilder`和`StringBuffer`都是用来构建...

    java实现国际化

    在实际项目中,为了确保代码的可维护性和扩展性,通常会使用专门的国际化框架,如Spring Framework的`MessageSource`接口,或者Apache Commons Lang的`MessageFormat`类,它们提供更高级别的抽象和便利功能。...

    java 讲师笔记

    4.3 StringUtils类:这可能是用于处理字符串的辅助类,通常在Apache Commons Lang库中可以找到。 4.4 StringBuilder类:StringBuilder是可变字符序列,适用于频繁修改字符串的场景。 4.5 正则表达式:正则表达式用于...

    JAVA时间处理类

    import org.apache.commons.lang.StringUtils; /** * 日付に関するユーティリティクラス * */ public class DateUtil { /** * 年月日時のフォーマット(年月日) */ public static final String YYYYMMDD =...

    Java中String类(字符串操作)的10个常见问题和解决方法

    相比之下,StringBuilder和StringBuffer是可变的,可以用来提高字符串操作的性能。StringBuilder是非线程安全的,因此通常比线程安全的StringBuffer具有更好的性能。 8. 重复拼接同一字符串 当需要重复拼接同一字符...

    java内部学习笔记.docx

    3. StringUtils类:Apache Commons Lang提供的字符串操作工具类。 4. StringBuilder类:可变的字符序列,效率高于String。 5. 正则表达式:用于模式匹配和字符串操作。 6. Date类:表示特定的瞬间,精确到毫秒。 7. ...

    深入解析java中的locale

    `Apache Commons Lang`库提供了一个`LocaleUtils.toLocale(String language)`方法,但该方法并不支持最后两个字符为小写的语言代码,比如"zh_CN"是有效的,但"zh_cn"则不被接受。 为了处理这种情况,我们可以自定义...

Global site tag (gtag.js) - Google Analytics