等到数据准备好 (Java)

Wait until data is ready (Java)

我有一个可以读取数据的蓝牙插座。

我有三个对象正在尝试获取数据。蓝牙通道获取一个整数,指定哪个对象应该接收数据。

我的问题:

如何制作每个对象 "wait" 直到数据可用。所以每个对象都会调用蓝牙对象上的 "read" 方法。蓝牙对象将继续在其线程上读取数据,但应该通知每个对象它们的数据已准备就绪(这些对象中的每一个都在阻塞,等待它的输入)。

我应该使用 wait/notify 模式,一个 while 循环来等待它被标记为数据已准备好吗?

想法?谢谢。

一个简单的方法是为每个等待的对象使用一个 BlockingQueue。当您读取线程有一个新对象时,您可以将它添加到该对象的队列中。

// for the publisher
blockingQueue.offer(message);

// for the consumer
Object p = blockingQueue.take();

另一种方法是不为每个参与者或对象使用一个线程,而是注册一个消费者。

// for the blue tooth reader
registerListener(key, consumer);

这样,读取蓝牙的线程也会调用执行每个操作所需的代码 "object"

如果我正确理解你的问题,我会使用队列。

我会设置以下线程:

  • 初始化所有其他线程的主线程
  • 读取整数和数据并将数据推送到适当队列(按整数选择)的调度程序线程
  • 几个工作线程,每个 "destination" 个对象一个,每个都从自己的队列中读取。