如果我需要调用从多个线程创建xls
文件的方法-我可以将XLSTransformer
用作类的synchronized
(甚至不使用)字段吗?如果XLSTransformer.transformXLS()
方法真的很昂贵,还是可以在需要创建xls
的任何时候创建一个新实例?
我就是这个意思:
private synchronized XLSTransformer transformer = new XLSTransformer();
public void createXls() {
//...
transformer.transformXLS("template.xls", beans, "result.xls");
}
如果我从多个线程调用
createXls()
,它不会中断吗? 最佳答案
没有一个单独的说明,即XLSTransformer
是线程安全的,因此您可以假定它不是,或分析jXLS源代码(link)。但是,请注意,每个lib版本中它可能有所不同,因此您应在每次更新后再次检查。
如果是关于您的示例的,则synchronized
关键字是字段的非法修饰符。您可以将其与锁定this
对象的方法一起使用:
public synchronized void createXls() {
//...
}
或使用块时,可以选择将对象视为锁:
public void createXls() {
//...
synchronized( transformer ) {
//...
}
//...
}
Java教程中的更多信息:
Synchronized Methods
Intrinsic Locks and Synchronization