doN*_*doN 1 java date simpledateformat
我班上有以下代码
private static final SimpleDateFormat SDF_ISO_DATE = new SimpleDateFormat("yyyy-MM-dd");
private static final SimpleDateFormat SDF_ISO_TIME = new SimpleDateFormat("HH:mm:ss");
public static String getTimeStampAsString(final long time) {
TimeZone tz = TimeZone.getTimeZone("UTC");
SDF_ISO_DATE.setTimeZone(tz);
SDF_ISO_TIME.setTimeZone(tz);
return SDF_ISO_DATE.format(
new Date(time)) + " " + SDF_ISO_TIME.format(new Date(time)
);
}
Run Code Online (Sandbox Code Playgroud)
在我的多线程应用程序中,以下方法将来会返回日期,即使对于当前日期,静态方法或变量是否对此负责?
编辑:
我有以下代码来重现和证明答案中提到的内容,但仍然无法.可以帮助我同样的一些人.
public static void main(String[] args) throws InterruptedException, ExecutionException {
Callable<String> task = new Callable<String>(){
public String call() throws Exception {
return DateUtil.getTimeStampAsString(1524567870569L);
}
};
//pool with 50 threads
ExecutorService exec = Executors.newFixedThreadPool(50);
List<Future<String>> results = new ArrayList<Future<String>>();
//perform 10 date conversions
for(int i = 0 ; i < 50 ; i++){
results.add(exec.submit(task));
}
exec.shutdown();
//look at the results
for(Future<String> result : results){
System.out.println(result.get());
}
}
Run Code Online (Sandbox Code Playgroud)
是静态方法还是变量负责这个?
静态变量.SimpleDateFormat不是线程安全的,因为您通过调用setTimeZone()来修改其内部状态,所以这应该是显而易见的.这意味着有几个线程可以同时执行此操作,这应该会产生不可预测的结果.
您需要在本地构建格式,而不是重复使用静态定义的格式.或者更好的是,删除Java的旧时间管理类并使用java.time.*代替.
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |