程序设计大概是这样的:我先发送报文,在接收到应答报文后,对应答报文进行检测操作。
遇到的问题:如下,sendMsg()后,因为RecvMsg()是自动回调函数,得等待RecvMsg()被调用收到应答报文后,才能checkRespMsg(),这中间需要锁或者什么来同步一下,该怎么做?
public static void main(String[] args){ sendMsg(); //这里该写什么 checkRespMsg(); }
public static void RecvMsg(){ //这里该写什么 }
sendMsg()和RecvMsg()都是同步的吗?是的话就不用加锁吧;若不是同步的可以将返回报文放到队列、集合中,取出报文进行校验,个人愚见
异步的。因为要for循环发好多报文,而且先发不一定能先收到,队列最后检测会出问题。
我用wait()和notify()同步了一下,解决了。
不要把简单的事情弄复杂,你应该这样子写,就可以轻松地解决你的问题了,不要乱加什么锁。
public static void main(String[] args){ sendMsg(); } public static void RecvMsg(){ //收到数据后 //就检查 收到的数据。 checkRespMsg(); }
我之前也是这样想的,但是checkRespMsg()需要参数,RecvMsg()因为是其他人写的jar包里的回调函数,无法提供该参数;不然就要用全局变量了。而我也想学习一下锁和同步问题,就是这样
@Gotogoo:如果你是C#写的话,我可以轻松解决,无奈 我不懂java
RecvMsg 与main 无任何关联。 还是加个标志吧
这里该怎么同步啊,求大神指教
搜一下java的future
public static void RecvMsg(){ checkRespMsg(); } 这样不行?
下一个发送的报文会用到前一个报文的应答,sendMsg()是for循环发送的,这样会出现发了两三个报文,才收到第一个报文的应答,而且后面发送的报文会出错