首页 > 解决方案 > 为什么我一次不能运行多个线程?

问题描述

我有一个 Spring Boot 应用程序,我正在尝试读取多个阅读器,然后根据阅读器的输出执行某些数据库操作。在我创建运行组件的类之前,它工作正常。现在我得到一个arrayindexoutofboundsexception。这是代码。

有错误的方法:

private void Start() throws AlienReaderException, IOException{
    ThreadStop = false;

     service= new MessageListenerService(3900);
     service.setMessageListener(this);
     service.startService();
    System.out.println("length of readers: "+Reader.ipAddress.length);

      for (lastThreadId = 0; lastThreadId < Reader.ipAddress.length; 
lastThreadId++)
      {
          **m_inventory[lastThreadId] = new 
AlienReader(Reader.ipAddress[lastThreadId], Reader.port, 
Reader.username[lastThreadId], Reader.password[lastThreadId]);**
          log.info("taginventory reader: "+ 
Reader.ipAddress[lastThreadId]+"Thread: "+lastThreadId);
          m_run_process[lastThreadId] = new Thread(new 
StartInventoryThread(Reader.ipAddress[lastThreadId], Reader.port, 
Reader.username[lastThreadId], Reader.password[lastThreadId], 
m_inventory[lastThreadId]));
          m_run_process[lastThreadId].start();
      }
      --lastThreadId;

      try
      {
          Thread.sleep(1000);
      }
      catch (Exception ex)
      {
          ex.getMessage();
      }


}

阅读器文件

public class Reader{

    public static String[] ipAddress={"111.111.11.111", 
        "111.111.11.111","111.111.11.111"};
    public static int port=11;
    public static String[] username={"username", "username"};
    public static String[] password={"password", "password"};
}

错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tagInventory' defined in file [C:\Users\rcollins\Workspaces\MyEclipse 2017 CI\rfidreader\target\classes\com\rfidreader\rfidbusiness\TagInventory.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.rfidreader.rfidbusiness.TagInventory]: Constructor threw exception; nested exception is java.lang.ArrayIndexOutOfBoundsException: 2
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1238) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1137) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
    at com.rfidreader.RfidreaderApplication.main(RfidreaderApplication.java:27) [classes/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.rfidreader.rfidbusiness.TagInventory]: Constructor threw exception; nested exception is java.lang.ArrayIndexOutOfBoundsException: 2
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:182) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1230) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    ... 17 common frames omitted
Caused by: java.lang.ArrayIndexOutOfBoundsException: 2
    at com.rfidreader.rfidbusiness.TagInventory.Start(TagInventory.java:139) ~[classes/:na]
    at com.rfidreader.rfidbusiness.TagInventory.<init>(TagInventory.java:96) ~[classes/:na]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_112]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_112]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_112]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_112]
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:170) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    ... 19 common frames omitted

标签: javaspringmultithreadingspring-boot

解决方案


推荐阅读