[英]Java - synchronized DateFormat - jxls
我需要在jxls
bean中使用DateFormat
對象。 如果在我的班上我寫了以下內容:
private synchronized DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
它是線程安全的嗎? 在同一個班級我有一個方法:
public void doSomething() {
Map<String,String> beans = new HashMap<String,String>();
beans.put("df",df);
XLSTransformer transformer = new XLSTransformer();
transformer.transformXLS("template.xls", beans, "result.xls");
}
這是從多個線程調用的。
如果synchronized
字段在這種情況下沒有幫助,我該怎么做才能從jxls
提供線程安全的日期格式而不必每次都創建新的DateFormat
對象?
不,你不能添加synchronized
到這樣的字段。
doSomething
都可以創建一個: 例如:
public void doSomething() {
Map<String,String> beans = new HashMap<String,String>();
beans.put("df", new SimpleDateFormat("dd.MM.yyyy"));
XLSTransformer transformer = new XLSTransformer();
transformer.transformXLS("template.xls", beans, "result.xls");
}
由於每個調用線程都將獲得自己的SimpleDateFormat
實例,因此這將是線程安全的(假設SimpleDateFormat不會長時間運行並在傳遞給xslt轉換器時傳遞給其他線程)。
ThreadLocal
來處理多個線程: 例如:
private static final ThreadLocal<SimpleDateFormat> df =
new ThreadLocal<Integer>() {
@Override protected Integer initialValue() {
return new SimpleDateFormat("dd.MM.yyyy");
}
};
public void doSomething() {
// ...
beans.put("df", df.get());
// ...
}
DateTimeFormat
。 DateTimeFormat類是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.