等到数据准备好 (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" 个对象一个,每个都从自己的队列中读取。
我有一个可以读取数据的蓝牙插座。
我有三个对象正在尝试获取数据。蓝牙通道获取一个整数,指定哪个对象应该接收数据。
我的问题:
如何制作每个对象 "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" 个对象一个,每个都从自己的队列中读取。