2

我决定将一个后台任务分成两个线程。因此,我有一个ScheduledExecutorService管理两个工作线程并每 3 秒定期运行它们的一个。他们执行接下来的两个任务:

  1. 从服务器检索数据
  2. 对这些数据进行一些操作

因此,在第一个线程从服务器检索大量数据后,它会将其传递给第二个工作线程,后者对其进行转换。

但我认为这是某种反模式,因为我会这样做 - 一个线程将依赖于另一个线程,从多线程应用程序设计的角度来看这是不好的。我是对还是错,这个解决方案还不错?任何解释,特别是从设计的一般观点来看,都将受到赞赏。

4

2 回答 2

3

这是一个典型producer/consumer示例,您可以将数据检索线程视为a producer将数据操作线程视为消费者。所以我认为设计没有任何问题。

您可以使用适当的类来实现concurrent.BlockingQueue在线程之间传递消息,主要是producerconsumer

于 2013-02-20T18:05:12.337 回答
0

一根线。伪:

while(true){
  dateTime start=now();
  retrieveData;
  transformData;
  dateTime end=now();
  dateTime elapsed=end-start;
  int msElapsed=dateTimeToMs(elapsed);
  if (msElapsed>0) Sleep(msElapsed);
};

没有线程间通信,没有同步,没有队列,没有重叠,没问题。

于 2013-02-20T21:26:36.597 回答