Timer & sleep()

tf 2006-08-27 04:50:34
我在做一个东东,要定时从某些地方读取消息
例如,每5S读取一次消息,然后再把消息保存到本地。
开始打算用Timer做,但是发现,如果用Timer,那么有可能下一次任务开始了,但是上一次任务还在进行。为了防止这种情况的出现我打算使用Sleep()来代替原来的方案。
//原来的方案
timer.schedule(new MyTask(), 0, 1000);
然后在MyTask.run()里面调用dealMessage()处理消息
//现在的方案
直接
dealMessage();
然后
Thead.sleep();

不知道sleep()和timer这样用法有什么差别?各有什么优点和确定啊?
...全文
470 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tf 2006-09-02
  • 打赏
  • 举报
回复
不晓得哇,那么复杂
现在的方案是,设置一个标志位,每次TIMERTASK运行的时候检查这个标志位,如果上一个TASK正在运行,那么这个TASK就不运行直接退出了,呵呵,多谢啦
gefengxztg 2006-09-01
  • 打赏
  • 举报
回复
那能不能用wait()和notify()组合实现呢
tf 2006-08-31
  • 打赏
  • 举报
回复
但是我不知道TIMERTASK那个TASK会运行多久哈
gefengxztg 2006-08-29
  • 打赏
  • 举报
回复
如果对时间要求不准确
直接把timer间隔时间变长些不就可以啊
我觉得sleep()好像挺占资源的
gefengxztg 2006-08-29
  • 打赏
  • 举报
回复
就是如果程序在同步方法或同步块中
如果一个线程进入里面,然后sleep()
这时候别的对象是进不去的,因为它没有释放锁
只有该线程出同步方法或同步块,其他线程才能进入执行
tf 2006-08-28
  • 打赏
  • 举报
回复
SingleThreadPool 我们做的项目是用JDK1.4的哇,唉,有没有更好的办法啊?
to gefengxztg(戈峰)
谢谢你哇
sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行
可能不能达到你的目的(因为你不可能知道要sleep多久)
看用wait()和notify()行不

难道不能把timer定时长一点啊


sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行 这个是什么意思啊?
另外,这个东东,对时间要求不准确,但是一定要保证不能在其中一个消息在处理的时候另外一个消息也会被同时处理
gefengxztg 2006-08-27
  • 打赏
  • 举报
回复
SingleThreadPool???
没听过,请赐教
chiny 2006-08-27
  • 打赏
  • 举报
回复
使用SingleThreadPool,但必须要JDK1.5+
gefengxztg 2006-08-27
  • 打赏
  • 举报
回复
sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行
可能不能达到你的目的(因为你不可能知道要sleep多久)
看用wait()和notify()行不

难道不能把timer定时长一点啊



62,616

社区成员

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

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