Java Android将数据发送到其他线程队列
我想生成一些通过TCP套接字发送的文本字符串。我在几分钟内就完成了。 然而,我想要一个生产者-消费者模式。我不在乎它是否失败。 我是否应该为此在应用程序中创建一个阻塞队列?我应该创建一个服务吗?Java Android将数据发送到其他线程队列,java,android,Java,Android,我想生成一些通过TCP套接字发送的文本字符串。我在几分钟内就完成了。 然而,我想要一个生产者-消费者模式。我不在乎它是否失败。 我是否应该为此在应用程序中创建一个阻塞队列?我应该创建一个服务吗? 请注意,我需要一个线程来管理此作业。创建一个LinkedBlockingQueue,生产者在其中添加数据。创建一个大约每秒触发一次的计时器。定时器的任务是通过电线发送消息 为此,生产者(生成消息的生产者)和消费者(Timer)都应该可以访问LinkedBlockingQueue)。计时器将删除链接锁定队
请注意,我需要一个线程来管理此作业。创建一个
LinkedBlockingQueue
,生产者在其中添加数据。创建一个大约每秒触发一次的计时器。定时器的任务是通过电线发送消息
为此,生产者(生成消息的生产者)和消费者(Timer
)都应该可以访问LinkedBlockingQueue
)。计时器将删除链接锁定队列的第一个元素,然后发送它
听起来不错?如果这是一个短任务(如您所评论的),我建议将其作为后台线程放在异步任务中。您可以单独控制这方面的任何内容,这将有助于您调试它<代码>服务更适合于长时间执行的任务,因此我不建议在这个范围内使用它(甚至与其他活动
通信也有点困难。您可以找到异步任务
的文档,这里是一个示例
阻塞结构取决于您的需要-但我认为您在您的情况下不需要它。无论如何,如果您需要它,您可能会发现有很多线程安全的数据结构可以使用,您可能会觉得很有用。此任务是“短任务”吗任务,意思是开始的时间很短,完成任务后就结束了?它在时间上是未知的,或者可能是永远的持续时间?如果有网络连接,它最多需要30-1000毫秒。如果重试几次会出现问题。但我想在重试几次后放弃它。现在听起来其实不是很好。一个ArrayList
既不是inte,也不是inte不希望在线程之间共享,也不希望在生产者-消费者模式中使用,例如@zapl我自己就是一名学习者。我应该使用LinkedBlockingQueue
,而不是ArrayList
?Rest保持不变?=)是的,因为这就是阻塞队列的用途。它们允许任何线程排队(生成)另一个(甚至多个)使用者线程接收的数据。它们是线程安全的。使用ArrayList
时,您必须进行大量复杂的同步,才能使其安全快速。本质上,这里提到的任何子类都应该有效。@zapl哈哈!我来这里是为了回答别人的问题,我自己也学到了一些新东西!!Hm那么即使我退出活动,asynctask也会运行吗?嗯,我认为这可能不会像我所需要的那样工作,因为如果有东西被发送,服务器会阻塞其他tcp传入连接,所以它会严重失败。理想情况下,我希望采用集中的方法。@Parhs您到底想做什么?AsyncTask实际上是线程,因此它将一直运行到必须运行为止,与您的活动无关。它开始工作,然后退出。因为它们是线程,所以你没有阻止任何东西,你可以定义一个传入套接字和一个传出套接字,两者同时工作(我在许多应用程序中使用)。只要有足够的bandwith来处理tcp套接字,就可以声明任意数量的tcp套接字。