java中定时等待的问题

jianmao06 2009-08-08 05:16:22
我写了一个socket程序,server上有多个服务端,server负责一个主程序来管理各个客户端,我按照一个顺序发送信息给客户端,是一个一个发,首先发给第一个客户端1,从信息开始发出的时候我就要开始计时,如果客户端在30秒内没有发送消息给server,那么server就自动的处理,然后继续发送消息给下一个客户端,这里需要使用一个什么技术?timer的话我已经试了,他不会在server的主程序上等待客户端的响应,只是规定多少秒之后执行task,我现在要的是如果在这30秒之内我收到了用户的信息,我就继续给下一个客户端发送信息,超时的话我就默认处理掉,这里涉及到一个性能的问题,希望不需要用while循环等待一个变量来出来,麻烦各位高手指教!!!!
...全文
261 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
szmneo 2009-08-12
  • 打赏
  • 举报
回复
http://www.javaeye.com/topic/147353
看到的一个例子,提供个思路,呵呵
jianmao06 2009-08-10
  • 打赏
  • 举报
回复
下一次循环的是他还是要用到timer,但是timer已经退出了,所以出现了一个timer has canceled
的异常啊
zhuxr2003 2009-08-10
  • 打赏
  • 举报
回复
timer应该可以的,设置10秒运行一次,00:00开始执行任务,发给客户端A,记录发布时间,在00:10时检查客户端A有没有返回信息。如果有返回就处理信息,继续发给B客户端。如果到00:30还没返回,也处理,继续发给B客户端。你要记录下,当前被发布的客户端,及发布时间。
jianmao06 2009-08-10
  • 打赏
  • 举报
回复
正在研究,还有其他高手吗??小弟是菜鸟,但是我很虚心的学
奋斗并快乐着 2009-08-08
  • 打赏
  • 举报
回复
一个想法:
Object shareObj = new Object();
Timer timer;
/////////////////////
Thread for send:
for mem : members
mem.send(msg)
synchronized(shareObj){
timer.schedule()// execute 30 seconds later
shareObj.wait();
}
end

//////////////
Thread receive for mem:
when mem received, call
if(!mem.timeout){
timer.cancel
synchronized(shareObj){
shareObj.notify();
}
}

//////////////
Timer:
executeTask(){
mem.timeout = true;
timer.cancel
synchronized(shareObj){
shareObj.notify();
}
}


在设置和读取member timeout状态的时候最好也加上同步

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧