1

xls複数のスレッドからファイルを作成するメソッドを呼び出す必要がある場合、クラスのフィールドXLSTransformerとしてsynchronized(またはそうでなくても) 使用できますか? また、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 ソースコードを分析することができます (リンク)。ただし、ライブラリのバージョンごとに異なる可能性があるため、更新のたびに再度確認する必要があることに注意してください。

それがあなたの例に関するものであれば、synchronizedキーワードはフィールドの不正な修飾子です。thisオブジェクトをロックするメソッドで使用できます。

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

または、ロックとして扱われるオブジェクトを選択できる場合はブロックを使用します。

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

Java チュートリアルの詳細:

  1. 同期されたメソッド
  2. 固有のロックと同期
于 2015-04-19T09:15:18.937 に答える