Java 在Android中,在两个工作线程之间传递数据是一个好主意吗?

Java 在Android中,在两个工作线程之间传递数据是一个好主意吗?,java,android,multithreading,Java,Android,Multithreading,我决定把一个后台任务分成两个线程。因此,我有一个ScheduledExecutorService,它管理两个工作线程,并每隔3秒定期运行它们。它们执行以下两项任务: 从服务器检索数据 使用此数据进行一些操作 因此,在第一个线程从服务器检索到大量数据后,它会将数据传递给第二个工作线程,由第二个工作线程进行转换 但我认为这是某种反模式,因为我会这么做——一个线程依赖于另一个线程,从多线程应用程序设计的角度来看,这是不好的。我是对的还是错的,这个解决方案还不错?任何解释,特别是从设计的一般点都将被理解

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

  • 从服务器检索数据
  • 使用此数据进行一些操作

  • 因此,在第一个线程从服务器检索到大量数据后,它会将数据传递给第二个工作线程,由第二个工作线程进行转换 但我认为这是某种反模式,因为我会这么做——一个线程依赖于另一个线程,从多线程应用程序设计的角度来看,这是不好的。我是对的还是错的,这个解决方案还不错?任何解释,特别是从设计的一般点都将被理解。

    < P>这是一个典型的<代码>生产者/消费者< /代码>示例,在该示例中,您可以考虑数据检索线程A<代码>生产者< /代码>和用户的数据操作线程。因此,我认为设计中没有任何错误

    您可以使用实现
    并发.BlockingQueue
    的适当类在线程之间传递消息,主要是从
    生产者
    消费者
    一个线程。伪:

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

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

    所以我从你的话中了解到,这两个线程之间不会有任何相互依赖关系?如果你使用的是
    线程安全阻塞队列,就不应该有这种依赖关系。只需
    消费者
    线程将
    阻塞/等待
    ,直到
    生产者
    线程提供数据,然后对其进行处理。绝对不会。如果工人们开始说话,他们可能会反抗。首先想到的是——为什么是两条线?为什么没有一个线程检索数据,然后对其进行转换?