1

我有不断传递实时数据的方法。

然后该方法评估数据:

void processMessage(String messageBeingPassed) {
  //evaluate the message here and do something with it
  //depending on the current state of the message
  //if message.equals("test") 
  //call separate thread to save to database etc...
  //etc...
}

我的问题是,将整个方法体放在线程中以获得更好的性能有什么好处吗?

如:

void processMessage(String messageBeingPassed) {
  Runnable runnable = new Runnable() {
    public void run() {
  //evaluate the message here and do something
  //depending on the current state of the message
  //if message.equals("test") 
  //call separate thread to save to database etc...
  //etc...
  }
  //start main body thread for this current message etc...
 } 
}

感谢您的任何回复。

4

3 回答 3

2

这将取决于各种因素。如果该方法是您的应用程序的瓶颈(即您有很长的消息队列等待处理),那么它可能会将您的性能提高到某个点,然后如果您使用太多线程,则会再次降级。所以你应该使用一个线程池,并有 4 个线程负责,或者其他一些最有效的线程。

但是,如果您没有收到这样的消息队列,那么这对您几乎没有帮助。

无论哪种方式,唯一确定的方法是通过测试和分析什么在您的应用程序中表现最佳。

于 2013-07-05T04:18:11.700 回答
0

优点是可以一次处理多条消息,并且在处理消息时调用方法不需要阻塞(换句话说,消息处理将是异步的而不是同步的)。缺点是如果你不小心设计你的方法,你就会对数据竞争/死锁等敞开心扉——通常,如果你的可运行对象只会在messageBeingPassed对象上运行(而不是在任何静态字段上),那么你应该没事。此外,线程会带来一些开销,您可以通过使用 anExecutorService而不是构建自己的线程对象来减少这些开销。

于 2013-07-05T04:17:37.313 回答
0

这取决于数据速率和“processMessage”所花费的时间。如果下一个数据在“processMessage”方法完成前一个数据的执行之前到达,最好在“processMessage”方法中使用一个线程

于 2013-07-05T04:24:33.193 回答