我决定将一个后台任务拆分为两个线程。所以,我有一个ScheduledExecutorService
来管理两个工作线程并每隔3秒定期运行它们。他们实施接下来的两项任务:
因此,在第一个线程从服务器检索大量数据之后,它将它传递给第二个工作线程,后者将其转换。
但我认为它是某种反模式,因为我会这样做 - 一个线程将依赖于另一个线程,并且从多线程应用程序设计的角度来看它是不好的。我是对还是不对,这个解决方案还不错?任何解释,特别是从设计的一般点,将不胜感激。
答案 0 :(得分:3)
这是一个典型的producer/consumer
示例,您可以在其中考虑数据检索线程 a producer
和数据操作线程消费者。所以我在设计中没有看到任何错误。
您可以使用实现concurrent.BlockingQueue
的适当类在线程之间传递消息,主要是从producer
到consumer
答案 1 :(得分:0)
一个帖子。伪:
while(true){
dateTime start=now();
retrieveData;
transformData;
dateTime end=now();
dateTime elapsed=end-start;
int msElapsed=dateTimeToMs(elapsed);
if (msElapsed>0) Sleep(msElapsed);
};
没有线程间通信,没有同步,没有队列,没有重叠,没有问题。