如何使用自定义事件监听器从Java中的多线程接收数据?

时间:2019-01-01 16:10:59

标签: java multithreading thread-safety streaming

我大约有500个线程(假定所有这些线程都称为X),这些线程连续从不同的静态服务接收数据。另外,我有20个线程(假定所有这些线程都称为Y)来接收从其他线程(从X)返回的数据。

我应该使用BlockingQueue还是自定义事件监听器?哪一个更好?

此外,应该没有数据丢失。

3 个答案:

答案 0 :(得分:0)

模仿使用 BlockingQueue ,它有一个带有阈值点的队列。发布这一点后,无法再处理更多线程。在一种情况下,当线程(X或Y)(无法再次处理)抛出异常(失败)时,将无法恢复丢失的数据。

但是,自定义事件监听器是一种首选方法,其中可以对所有线程进行确认,并且在线程异常(失败)的情况下,我们可以使用某种重新处理机制来检索丢失的数据。

>

可以使用 ReactiveX 可观察)库解决此问题。

答案 1 :(得分:0)

您为什么不尝试消息队列(例如Kafka,rabbitmq) 它们像线程x和Y之间的数据持有者一样工作。 您将数据从x放入队列中,然后通过异步的Y获取/处理数据。

如果我们考虑x 500和y 20的数目,则应该在Event Listener中选择此选项。即使对于x的每个调用,也会有20个调用(假设)。这可能会在重载时成为瓶颈。 / p>

答案 2 :(得分:0)

BlockingQueue更好(通常)。

相关问题