如何设计一个类不停的循环检查!

shine_car 2004-05-14 10:23:58
我开始这样写,可能是占资源过多,无法处理.

while(true){
System.out.println("do something ");
try{
if(systemQueue.getMsgQueueSize()!=0){
//有东西要处理,处理,进入下一次循环
mainFrame.MainLoop();
System.out.println("process topic ");

}else{
//没东西处理,等一秒,进入下一次循环
System.out.println("process wait ");
Thread.sleep(1);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
设置成Thread.sleep(1000)可以处理了.
但是要求实时处理.
各位有什么好建议.
我后来改成public class Timetask {
static int i=1;
int index=0;
Timer timer;

public Timetask() {
i++;
//System.out.println("listener:"+i);
timer = new Timer();

timer.schedule(new DatumTimer(),0,1);// 每miao激发一次

}

class DatumTimer extends TimerTask {
public void run()
{
try {
System.out.println("do something ");
}
catch (Exception ex) {
ex.printStackTrace();

}
}

}
也不行
...全文
28 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
blasterboy 2004-05-14
  • 打赏
  • 举报
回复
错了,刚才理解错了
那你这个只能用观察着模式了。
systemQueue是被观察者,而自己本身是观察者
当systemQueue发生变化的时候,来通知所有的观察者进行动作
blasterboy 2004-05-14
  • 打赏
  • 举报
回复
while(true){
System.out.println("do something ");
try{
// 等待systemQueue线成结束
systemQueue.join()
if(systemQueue.getMsgQueueSize()!=0){
//有东西要处理,处理,进入下一次循环
mainFrame.MainLoop();
System.out.println("process topic ");

}else{
//没东西处理,等一秒,进入下一次循环
System.out.println("process wait ");
Thread.sleep(1);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
bluesmile979 2004-05-14
  • 打赏
  • 举报
回复
实时用wait,notify

while(true){
System.out.println("do something ");
try{
if(systemQueue.getMsgQueueSize()!=0){
//有东西要处理,处理,进入下一次循环
mainFrame.MainLoop();
System.out.println("process topic ");

}else{
//没东西处理,等一秒,进入下一次循环
System.out.println("process wait ");
wait()
//Thread.sleep(1);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
收到事件的地方调用一下notify就可以了。
fqyugu 2004-05-14
  • 打赏
  • 举报
回复
先mark
jianxiazwx 2004-05-14
  • 打赏
  • 举报
回复
实时用notify就可以了
allanic 2004-05-14
  • 打赏
  • 举报
回复
不清楚这里“实时”的要求是指什么,不过两段程序都没什么问题,只要合理调整sleep的时间就好了呀。sleep(1)或者schedule( , ,1)是指间隔时间1毫秒,显然相对于do_something来说太短了。
hxshandle 2004-05-14
  • 打赏
  • 举报
回复
还2个线程啊。
一个监听一个处于等待的线程,收到消息后,在调用处理线程。
kitty009 2004-05-14
  • 打赏
  • 举报
回复
用多线程就ok了,设定单独线程执行,不会死啊~~
zengt1978 2004-05-14
  • 打赏
  • 举报
回复
一线程处理,另一线程监听如何?设置一标志看是否要处理!
bluesmile979 2004-05-14
  • 打赏
  • 举报
回复
楼上的,你适过么?无限循环就算你另起线程一样会死得很难看。
geniejj 2004-05-14
  • 打赏
  • 举报
回复
你需要实时响应,只能设计成无限循环的形式,我认为你开始的程序片段没什么大问题,你只要把你的这部分拿出来做成一个线程,让它单独运行,另外,你要实时响应,在程序片段中就不能添加sleep(),而且也不需要加。在电信级的系统中时延是按ms来衡量的
shine_car 2004-05-14
  • 打赏
  • 举报
回复
jms或message driver ejb可以吗?各位有这个的经验吗?
bluesmile979 2004-05-14
  • 打赏
  • 举报
回复
那完全的实时不太可能做到

sleep(100)应该可以接受
shine_car 2004-05-14
  • 打赏
  • 举报
回复
如何notify,还有就是systemQueue也是这个程序去调用.因为这个是个电信的环境.有别的程序(c或c++写的)发送请求,这个程序不停监听请求.这个请求没法用别的程序去notify.不知道如何设计这个监听器.
就像例如:要不停去检测数据库,如果有记录就处理,该如何设计.

62,616

社区成员

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

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