最近面试遇到了关于SimpleDateFormat是否线程安全的问题,然后去学习了一下,发现SimpleDateFormat继承了DateFormat抽象类,而DateFormat又继承了Format这个抽象类,Format是一个抽象的基类,用于格式化区域设置敏感的信息,如日期、消息和数字。
Format方法有三个直接的子类:NumberFormat、MessageFormat和DateFormat,类的方法中还用到了两个类,ParsePosition和FieldPosition。ParsePosition用于在解析过程中跟踪当前的位置;FieldPosition用于识别格式化输出中的字段。
平时用的比较多的应该是SimpleDateFormat,用于格式化Date对象,如:
public class Example {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
Date date = new Date();
String format = sdf.format(date);
System.out.println("当前时间:" + format);
}
}
本章重点:
Format类和其子类都是非线程安全的,类的定义上的原话:如果多个线程同时访问一种格式,则必须在外部同步
If multiple threads access a format concurrently, it must be synchronized externally