设置参数的解决方式,有问题.http://q364035622.iteye.com/blog/1860640 .只能另想他方.
一个理解wait()与notify()的例子
原文链接:http://blog.csdn.net/xm4014/archive/2003/01/28/14714.aspx 这个解释了如何使用wait()和notify().那么基础的问题解决了,如何实现mina同步呢?
使用对象的wait及notify方法实现了mina的同步.
- //ResultLock 存放请求ID与对应的返回结果
- public class ResultLock {
- private String id;
- public ResultLock(String id)
- {
- this.id=id;
- }
- private Object message;
- public Object getMessage() {
- return message;
- }
- public void setMessage(Object message) {
- this.message = message;
- }
- }
- 发送请求
- session.write(request);//mina发送消息
- ResultLock r=new ResultLock(request.getMessageID());
- LockMap.store(request.getMessageID(), r);//此对象放到一个map
- try
- {
- synchronized (r) {
- r.wait(milliseconds);
- }
- }
- catch(Exception ee)
- {
- throw ee;
- }
- finally
- {
- LockMap.remove(request.getMessageID());
- }
- return r.getMessage();//取到结果
- --------------------
- 在messageReceived方法,即收到返回消息刻唤醒
- ResultLock lock=LockMap.pick(resp.getReqMessageID());
- if(lock!=null)
- {
- synchronized (lock) {
- lock.notify();
- lock.setMessage(结果值);//
- }
- }
在产品中使用了这种实现方式,没发现什么问题.