Big*_*hne 12 java multithreading synchronisation
我的问题:我已经将802.15.4无线网络连接到串口(使用包装器).我可以将包发送到网络并监听传入的包.你可以想象这是高度异步的.
执行任务:我想将命令发送到网络并等待一个函数调用中的响应.例如:我想从节点获取网络ID为1338的温度.
double getTemperature(int id) throws Exception { .... }
Run Code Online (Sandbox Code Playgroud)
除了执行所有这些"同步(对象)等待(...)通知(..)"之外,还有更好的方法来等待响应消息吗?
最好的问候,bigbohne
也许添加一些香料:
这应该都以Web界面结束,用户可以通过ajax或直接请求这些命令.我还想过在数据库中缓存响应值.但是对于某些命令,你MUSS可以直接回答成功/失败
您可以使用BlockingQueue执行此操作,这样您就不必手动管理任何同步.请求可以发送消息,然后在BlockingQueue上调用take(),它将等待元素出现.元素是在返回回复时由端口上的任何侦听器插入到队列中的回复.
您只需要进行协调,以便侦听器和请求者共享同一个队列.对于支持此方案的每个请求,您只需要一个大小为1的队列.
// Send method
BlockingQueue<Reply> q = new ArrayBlockingQueue<Reply>(1);
serialCom.registerQueue(myRequest.getId());
serialCom.sendRequest(myRequest);
return q.take();
//Listener
BlockingQueue<Reply> q = queueMap.get(incomingMessage.getId());
q.add(incomingMessage.getReply());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11714 次 |
最近记录: |