等到数据就绪(Java)

时间:2015-08-30 12:15:49

标签: java multithreading bluetooth blocking

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

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

我的问题:

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

我是否应该使用等待/通知模式,while循环等待标记为数据准备就绪?

思考?谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

这样读蓝牙的线程也会调用为每个"对象执行操作所需的代码"

答案 1 :(得分:2)

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

我会设置以下主题:

  • 初始化所有其他人的主线程
  • 调度程序线程,它读取整数和数据并将该数据推送到正确的队列中(由该整数选择)
  • 几个工作线程,每个“目标”对象一个,每个都从自己的队列中读取。