SimpleDateFormat 线程不安全举例
时间: 2023-12-07 08:40:10 浏览: 100
线程安全单例
SimpleDateFormat是Java中常用的日期格式化类,但它是线程不安全的。这是因为SimpleDateFormat内部有一个Calendar对象,用于日期的格式化和解析,而Calendar对象是非线程安全的。如果多个线程同时访问同一个SimpleDateFormat对象,就会导致线程安全问题。下面是一个简单的例子来说明这个问题:
```java
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatTest {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
try {
Date date = sdf.parse("2022-01-01 00:00:00");
System.out.println(date);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
}
```
在上面的例子中,我们创建了一个SimpleDateFormat对象,并将其格式化模式设置为“yyyy-MM-dd HH:mm:ss”。然后我们创建了10个线程,每个线程都会调用SimpleDateFormat对象的parse()方法来解析日期字符串“2022-01-01 00:00:00”。由于SimpleDateFormat是线程不安全的,所以这个程序会出现解析错误的情况。
阅读全文