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 教程中的更多信息:

  1. Synchronized Methods
  2. Intrinsic Locks and Synchronization