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