多个线程与多个传感器通信

时间:2012-06-20 15:37:34

标签: java multithreading

我是线程新手。我想连续24/7每隔一分钟一次与多个传感器进行通信。

塞纳里奥: 我有一种与传感器对话的方法,它有3个参数

public String perform(String command, String ip, String port)
{
  //talk to the sensor and then 
  returns reply;
}

我有一个包含传感器详细信息的数据库。

我现在在做什么

while(true)
{
  //get sensors from database

   //run perform method for all instruments
   for(int i=0;i<sensors.length-1;i++)
   {
    //call perform method and save the reply
   }
   Thread.sleep('one minute');
}

问题: 问题是,如果我有100个传感器,每个传感器需要1秒钟才能回复,之后我将等待1分钟,在这种情况下,我可能会丢失一些信息。说实话,有时需要一秒钟以上才能做出回应。

我想要做的是,从数据库中获取所有传感器的信息 然后为每个传感器创建一个线程。然后一次运行所有线程,这将返回一些信息。之后等待一分钟,然后再做一次。

感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:2)

你看过ScheduledThreadPoolExecutor吗?

一个简单的用法是为每个传感器创建一个Callable,并将线程池配置为包含与传感器一样多的线程。然后提交每个Callable,指定适当的时间表。

请注意,这种方法并不能保证特别准确的时间安排(Java不是任何实时平台)。另一个问题是创建大量线程可能需要相对内存(IIRC,每个线程的标准堆分配为512k,但它是可配置的),如果你有1000个传感器,这种方法就无法扩展。

答案 1 :(得分:0)

我个人会采取不同的方法。我希望服务器始终通过RESTful API进行监听,然后让传感器每分钟(或您决定的其他时间间隔)发布状态。这样,服务器和传感器不需要在同一个JVM中,并且IMHO更具可扩展性。此外,这样任何传感器也可以通过服务器上的另一个RESTful API查询任何其他传感器的状态。

此外,服务器可以启动一个线程来处理每个POST,如果一个传感器占用很长时间,则其他传感器不会被阻止。