2015-04-19 73 views
1

如果我需要調用一個方法從多個線程創建一個xls文件 - 我可以使用XLSTransformer作爲​​(甚至不是)類的字段嗎?如果XLSTransformer.transformXLS()方法真的很貴,或者可以隨時創建新實例,我需要創建xlsJava - jxls - XLSTransformer線程安全

這就是我說的:

private synchronized XLSTransformer transformer = new XLSTransformer(); 

public void createXls() { 
    //... 
    transformer.transformXLS("template.xls", beans, "result.xls"); 
} 

不會打破它,如果我叫createXls()從多個線程?

回答

1

沒有單一的說明,XLSTransformer是線程安全的,所以你可以認爲它不是,或分析jXLS源代碼(link)。但是,請注意,每個lib版本的版本可能不同,每次更新後應該再次檢查。

如果是關於您的示例,​​關鍵字是字段的非法修飾符。你可以用它與方法來鎖定this對象:

public synchronized void createXls() { 
    //... 
} 

或作爲鎖定處理塊時,您可以選擇對象:

public void createXls() { 
    //... 
    synchronized(transformer) { 
     //... 
    } 
    //... 
} 

在Java教程的更多信息:

  1. Synchronized Methods
  2. Intrinsic Locks and Synchronization