我现在做UDP通信,发每一帧数据 都要等应答 。我接收到数据都会将数据放在全局变量里我发完一帧数据 等应答的时候 就在死循环里判断那个全局变量是否是我要应答,是了就跳出死循环,否则知道超时退出。就好比是这样 send();//发送数据
waitAck();//等待应答public waitAck(){
while(true){
if(Strack.equal("myAck"));//如果是我要的应答 我就break; 当然没有的等到 我就超时退出,这里没有超时的代码
break;
}
}这种方式虽然可行 但是死循环使得CPU的使用率变的很高,浪费了资源,所以我想在等应答的时候先wait();挂起等待应答的循环,直到接收数据线程收到数据,才唤醒我挂起的等应答线程,在让循环往下执行一次去判断接受到得数据,若不是我要等的应答,再挂起不过不知道要如果做,总之我不想一直循环着等,我想有接收到数据才就行一次节省CPU的开销,高手们帮帮我
waitAck();//等待应答public waitAck(){
while(true){
if(Strack.equal("myAck"));//如果是我要的应答 我就break; 当然没有的等到 我就超时退出,这里没有超时的代码
break;
}
}这种方式虽然可行 但是死循环使得CPU的使用率变的很高,浪费了资源,所以我想在等应答的时候先wait();挂起等待应答的循环,直到接收数据线程收到数据,才唤醒我挂起的等应答线程,在让循环往下执行一次去判断接受到得数据,若不是我要等的应答,再挂起不过不知道要如果做,总之我不想一直循环着等,我想有接收到数据才就行一次节省CPU的开销,高手们帮帮我
解决方案 »
- 请教 当把一个子类赋给父类的引用时 这个对象的类型到底属于父类还是子类?
- struts2 validator框架问题
- 获取Iterator里的数据?
- 自己写的扫雷,请大家多多指教!(1)
- 用java写的聊天小程序,只有三个java文件----高分酬谢
- 为什么我的程序突然运行不了
- java.sql.SQLException:Can not open connection with full database pool(20)
- 现在找工作都有经验,可我刚毕业哪来的经验,怎么办了各位?
- 请问在java中怎样把“2”转换成int型?问题简单,不好意思了
- 60分寻找MS SQL7/2000 的JDBC,还可以再给分
- 帮忙看一下,小弟先谢过了。
- ArrayList排序问题?
接受数据包,收到后,notify,唤醒等待线程。jdk1.5之后,加了concurrent,也可以利用blockqueue来做,收到包放到blockqueue里面,另外一个线程专门从queue里取数据
我的监听端口只有一个,这个端口接收的数据后判断 要是应答帧 就赋值给全局变量,要是请求帧,在另处理。
我等应答的时候,是在send之后,阻塞在while里判断那个全局变量直到超时