1,目前我这个需求是需要做超时处理的,所有需要用timer进行定时器,超时直接退出。
Timer tt=new Timer();
tt.schedule(new TimerTask() {
public void run() {
System.out.println(“超时”);
timeOut=true;
}
},1000);//等待1s,数据发送完毕,如果没有则超时
while (flag){//如果这个服务的数据帧接收完毕,则不循环,进行下一个服务
//循环查询当前对象数据状态是否结束,待写
//如果结束,则flag置为false,退出循环
System.out.println("while");
if(timeOut){
System.out.println("超时lala");
return;//如果超时,直接退出
}
if (serviceModel.getUdsFlag()){
flag=false;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
tt.cancel();//取消超时
2,wait是做线程同步的,如果目前,如果wait的等待时间到了,那么等待的线程将继续进行,继续的时候再取判断当前获取到的状态,也可以,
synchronized (result) {
result.put(UpdateStep.FlowControl, null);
result.wait(1000);//等待流控制帧,如果1s不回复,那么则退出。
if((result.get(UpdateStep.FlowControl) == null)||(result.get(UpdateStep.FlowControl) == false))
{
System.out.println(“Result Don’t receive the flow control frame!”);
return false;
//System.out.println(“Don’t receive the flow control frame!”);
}
else{
System.out.println(“receive the flow control frame!”);
result.put(UpdateStep.FlowControl, null);}
}