1

xls如果我需要调用从多个线程创建文件的方法- 我可以使用XLSTransformersynchronized甚至不使用)类的字段吗?如果XLSTransformer.transformXLS()方法真的很昂贵,或者在我需要创建的任何时候都可以创建一个新实例xls

我正是这个意思:

private synchronized XLSTransformer transformer = new XLSTransformer();

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

createXls()如果我从多个线程调用它不会中断吗?

4

1 回答 1

1

没有单一的注释,即XLSTransformer线程安全,因此您可以假设它不是,或者分析 jXLS 源代码(链接)。但是,请注意,每个 lib 版本可能会有所不同,您应该在每次更新后再次检查。

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

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

或者当您可以选择被视为锁定的对象时使用块:

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

Java 教程中的更多信息:

  1. 同步方法
  2. 内在锁和同步
于 2015-04-19T09:15:18.937 回答