Java-jxls-XLSTransformer线程安全

Java-jxls-XLSTransformer线程安全,java,multithreading,concurrency,synchronized,jxls,Java,Multithreading,Concurrency,Synchronized,Jxls,如果我需要调用一个从多个线程创建xls文件的方法,我可以将XLSTransformer用作类的synchronized(甚至不)字段吗?如果XLSTransformer.transformXLS()方法非常昂贵,或者在需要创建xls的任何时候都可以创建一个新实例 这就是我要说的: private synchronized XLSTransformer transformer = new XLSTransformer(); public void createXls() { //...

如果我需要调用一个从多个线程创建
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源代码()。但是,请注意,在每个lib版本中可能会有所不同,您应该在每次更新后再次检查

如果是关于您的示例,
synchronized
关键字是字段的非法修饰符。您可以将其与锁定此对象的方法一起使用:

public synchronized void createXls() {
    //...
}
或者,当您可以选择被视为锁定的对象时,使用块:

public void createXls() {
    //...
    synchronized( transformer ) { 
        //...
    }
    //...
}
Java教程中的更多信息: