【问题标题】:java.lang.ArrayIndexOutOfBoundsException: -1 future.get() multithreadingjava.lang.ArrayIndexOutOfBoundsException: -1 future.get() 多线程
【发布时间】:2017-09-23 15:11:18
【问题描述】:

为什么我的应用会抛出一个

java.lang.ArrayIndexOutOfBoundsException: -1

当我在 java.utils.concurrent.Future 上调用 future.get() 时??

   List<Future> tableLoadings = new LinkedList<>();
   ExecutorService executor = Executors.newFixedThreadPool(8);
    try{
        for(Entry<Integer, String> entry: farmIds.entrySet())
        {   
            int id = entry.getKey();
            String username = entry.getValue(); 
            
            psLog.println("START ELABORAZIONE FARMACIA ID : "+ id+" TPH_USERNAME : "+username );    
            /*SdajSdaj*/
            tableLoadings.add(executor.submit(new StatusMultiThreading(id, username, psLog, connSTORY, connCF, mongoDatabase)));
        }
        for (Future<Void> future : tableLoadings) {         
                try{
                    future.get();           
                }catch(Exception e){
                    psLog.println("[EE] ERORE ELABORAZIONE THREAD FARMACIA [EE] "+e.getMessage());
                }
        }
    }finally{
        executor.shutdown(); 
        psLog.println("END CONSOLIDA STATUS FARMACIE");
    }           

这是日志..

START ELABORAZIONE FARMACIA ID : 62 TPH_USERNAME : A0102987
START ELABORAZIONE FARMACIA ID : 63 TPH_USERNAME : A0103019
START SENDING DATA TO DB FARMID = 66
...
START SENDING DATA TO DB FARMID = 17
[EE] ERORE ELABORAZIONE THREAD FARMACIA [EE] java.lang.ArrayIndexOutOfBoundsException: -1
[EE] ERRORE ELABORAZIONE THREAD FARMACIA [EE] java.lang.ArrayIndexOutOfBoundsException: -1
END CONSOLIDA STATUS FARMACIE

如果我调试,我找不到任何错误。

我无法进入 .get() 方法,所以我不明白哪一行代码是无效的。

【问题讨论】:

  • 在可能的级联异常情况下,使用 e.printStackTrace()(或者更好的是日志记录)来了解错误的原因。

标签: java multithreading indexoutofboundsexception java.util.concurrent


【解决方案1】:

到目前为止可以说:你使用ExecutorService来传递任务:

new StatusMultiThreading(id, username, psLog, connSTORY, connCF, mongoDatabase)

稍后,当您调用get() 时,会触发相应的任务。所以这个例外发生在你的那个班级内。

【讨论】:

  • 可能错误在这里:[...]List&lt;?&gt; results = List.class.cast(payload.get("result")); results.remove(0); results.remove(0); results.remove(results.size()-1); results.remove(results.size()-1); [...]
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 2012-09-19
  • 1970-01-01
  • 2018-04-26
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多