Получите ConcurrentModificationException, когда createRow () с Apache POI в многопоточном методе evem Я уже синхронизировал этот код. - PullRequest
0 голосов
/ 19 мая 2018

Я использую многопоточность для создания строк в Excel с пакетом Apache POI.Каждый поток создаст строку.Чтобы избежать проблемы параллелизма, я вынул код внутри синхронизированного блока, чтобы убедиться, что только один поток может создать строку и ячейку одновременно.однако я все еще получаю «ConcurrentModificationException».Когда код выполняется, я могу воспроизвести исключение в том же месте, где обрабатывается код.

the exception is 
java.util.ConcurrentModificationException
        at java.util.TreeMap$NavigableSubMap$SubMapIterator.nextEntry(TreeMap.java:1703)
        at java.util.TreeMap$NavigableSubMap$SubMapEntryIterator.next(TreeMap.java:1751)
        at java.util.TreeMap$NavigableSubMap$SubMapEntryIterator.next(TreeMap.java:1745)
        at java.util.TreeMap$NavigableSubMap$EntrySetView.size(TreeMap.java:1637)
        at java.util.TreeMap$NavigableSubMap.size(TreeMap.java:1507)
        at org.apache.poi.xssf.usermodel.XSSFSheet.createRow(XSSFSheet.java:777)
        at org.apache.poi.xssf.usermodel.XSSFSheet.createRow(XSSFSheet.java:149)
        at com.citi.mrr.rootquery.RootQueryThread.writeQueryResultToRow(RootQueryThread.java:157)
        at com.citi.mrr.rootquery.RootQueryThread.run(RootQueryThread.java:42)
        at java.lang.Thread.run(Thread.java:748)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

Мой код:

@Override
public void run() {
...
    //add row to excel sheet
    synchronized(this){

        Row row = sheet.createRow(querySequence+1); // here I get exception

        row.createCell(0).setCellValue( rqResult.getRQName());
       ..
     }

}

Спасибо залюбая помощь.

...