Java 线程安全日期分析器
我正在寻找一个线程安全的替代品。在good old上没有实现,只是抛出了一个错误。有什么想法吗?我不需要任何花哨的东西,只需要线程安全性和处理此模式的能力:Java 线程安全日期分析器,java,date,thread-safety,Java,Date,Thread Safety,我正在寻找一个线程安全的替代品。在good old上没有实现,只是抛出了一个错误。有什么想法吗?我不需要任何花哨的东西,只需要线程安全性和处理此模式的能力:“yyyy-MM-dd”如果可能,请使用。它的日期/时间解析器是线程安全的,而且它通常是比date/Calendar更好的API 您可以只使用它的解析器,然后将返回值转换为Date,但我个人建议使用整个库。为什么不将simpleDataFormat.parseObject()的调用放入您自己的synchronized块中 找到了一个 如中所述
“yyyy-MM-dd”
如果可能,请使用。它的日期/时间解析器是线程安全的,而且它通常是比date
/Calendar
更好的API
您可以只使用它的解析器,然后将返回值转换为
Date
,但我个人建议使用整个库。为什么不将simpleDataFormat.parseObject()
的调用放入您自己的synchronized
块中 找到了一个
如中所述,您可以同步、使用线程局部变量或Joda Time
例如,使用线程局部变量:
public class DateFormatTest {
private static final ThreadLocal<DateFormat> df
= new ThreadLocal<DateFormat>(){
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyyMMdd");
}
};
public Date convert(String source)
throws ParseException{
Date d = df.get().parse(source);
return d;
}
}
公共类DateFormatTest{
私有静态最终线程本地df
=新线程本地(){
@凌驾
受保护的日期格式初始值(){
返回新的SimpleDataFormat(“yyyyMMdd”);
}
};
公共日期转换(字符串源)
抛出解析异常{
日期d=df.get().parse(源代码);
返回d;
}
}
java.time
java.time
类型是线程安全的。java.time
API(The*)作为JavaSE8标准库的一部分,自2014年3月以来一直存在
以下引述的是政府的通知:
注意,从JavaSE8开始,用户被要求迁移到Java.time(JSR-310)——JDK的核心部分,它取代了这个项目
演示:
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
String strDate = "2021-06-13";
LocalDate date = LocalDate.parse(strDate);
System.out.println(date);
}
}
2021-06-13
输出:
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
String strDate = "2021-06-13";
LocalDate date = LocalDate.parse(strDate);
System.out.println(date);
}
}
2021-06-13
现代日期时间API基于并且不需要显式使用DateTimeFormatter
对象,只要日期时间字符串符合ISO 8601标准。您可能已经注意到,我在上述代码中没有使用解析类型(DateTimeFormatter
),因为yyyy-MM-dd
也是日期的ISO 8601模式
从了解有关现代日期时间API的更多信息
*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
这可能不太好,但很容易。性能将取决于同时有多少线程真正尝试访问格式化程序。我会先尝试一下(或者只是将对SimpleDataFormat的调用包装在一个同步块中),看看这是否真的是一个问题。+1无阻塞。用内存换取线程安全。简单案件没有外部大图书馆。你的答案是高声誉炸弹的附带受害者。