2015-04-19 43 views
1

如果我需要调用一个方法从多个线程创建一个xls文件 - 我可以使用XLSTransformer作为​​(甚至不是)类的字段吗?如果XLSTransformer.transformXLS()方法真的很贵,或者可以随时创建新实例,我需要创建xlsJava - jxls - XLSTransformer线程安全

这就是我说的:

private synchronized XLSTransformer transformer = new XLSTransformer(); 

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

不会打破它,如果我叫createXls()从多个线程?

回答

1

没有单一的说明,XLSTransformer是线程安全的,所以你可以认为它不是,或分析jXLS源代码(link)。但是,请注意,每个lib版本的版本可能不同,每次更新后应该再次检查。

如果是关于您的示例,​​关键字是字段的非法修饰符。你可以用它与方法来锁定this对象:

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

或作为锁定处理块时,您可以选择对象:

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

在Java教程的更多信息:

  1. Synchronized Methods
  2. Intrinsic Locks and Synchronization