我有一个读取数据的蓝牙插座。
我有三个试图获取数据的对象。蓝牙通道获得一个整数,指定哪个对象应该接收数据。
我的问题:
如何制作每个对象"等待"直到数据可用。所以每个对象都会调用" read"关于蓝牙对象的方法。蓝牙对象将继续其线程读取数据,但应通知每个对象他们的数据已准备好(这些对象中的每一个都是阻塞的,等待它的输入)。
我是否应该使用等待/通知模式,while循环等待标记为数据准备就绪?
思考?谢谢。
答案 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)
如果我理解你的问题,我会使用队列。
我会设置以下主题: