我在做一个东东,要定时从某些地方读取消息
例如,每5S读取一次消息,然后再把消息保存到本地。
开始打算用Timer做,但是发现,如果用Timer,那么有可能下一次任务开始了,但是上一次任务还在进行。为了防止这种情况的出现我打算使用Sleep()来代替原来的方案。
//原来的方案
timer.schedule(new MyTask(), 0, 1000);
然后在MyTask.run()里面调用dealMessage()处理消息
//现在的方案
直接
dealMessage();
然后
Thead.sleep();
不知道sleep()和timer这样用法有什么差别?各有什么优点和确定啊?
问题点数:20、回复次数:10
Top
1 楼 gefengxztg(戈峰) 回复于 2006-08-27 17:37:07 得分 5
sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行
可能不能达到你的目的(因为你不可能知道要sleep多久)
看用wait()和notify()行不
难道不能把timer定时长一点啊
Top
2 楼 digitalbeijing_001() 回复于 2006-08-27 18:54:21 得分 0
顶!
顶!
我自己业余时间写的网站,大家看看给点意见,谢谢啦!(没广告,没病毒)
都是Flash游戏,大家别想歪了哦,呵呵!
【偷看洗澡美女】很简单,把泡沫挪开,然后可以看到。。。。。
http://www.hunbei.com.cn/flash/flash_play.asp?id=3363
【透视眼镜】
http://www.hunbei.com.cn/flash/flash_play.asp?id=3317
【美女脱衣猜大小】
http://www.hunbei.com.cn/flash/flash_play.asp?id=3269
另外小游戏频道还有很多游戏,都挺好玩的。位置是:Flash频道->小游戏->美女Top
3 楼 chiny(从此有你) 回复于 2006-08-27 19:07:50 得分 5
使用SingleThreadPool,但必须要JDK1.5+Top
4 楼 gefengxztg(戈峰) 回复于 2006-08-27 19:41:59 得分 5
SingleThreadPool???
没听过,请赐教Top
5 楼 tf(菜鸟) 回复于 2006-08-28 23:49:58 得分 0
SingleThreadPool 我们做的项目是用JDK1.4的哇,唉,有没有更好的办法啊?
to gefengxztg(戈峰)
谢谢你哇
sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行
可能不能达到你的目的(因为你不可能知道要sleep多久)
看用wait()和notify()行不
难道不能把timer定时长一点啊
sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行 这个是什么意思啊?
另外,这个东东,对时间要求不准确,但是一定要保证不能在其中一个消息在处理的时候另外一个消息也会被同时处理
Top
6 楼 gefengxztg(戈峰) 回复于 2006-08-29 00:10:24 得分 5
就是如果程序在同步方法或同步块中
如果一个线程进入里面,然后sleep()
这时候别的对象是进不去的,因为它没有释放锁
只有该线程出同步方法或同步块,其他线程才能进入执行Top
7 楼 gefengxztg(戈峰) 回复于 2006-08-29 00:12:34 得分 0
如果对时间要求不准确
直接把timer间隔时间变长些不就可以啊
我觉得sleep()好像挺占资源的Top
8 楼 tf(菜鸟) 回复于 2006-08-31 23:44:11 得分 0
但是我不知道TIMERTASK那个TASK会运行多久哈Top
9 楼 gefengxztg(戈峰) 回复于 2006-09-01 07:06:14 得分 0
那能不能用wait()和notify()组合实现呢Top
10 楼 tf(菜鸟) 回复于 2006-09-02 15:26:00 得分 0
不晓得哇,那么复杂
现在的方案是,设置一个标志位,每次TIMERTASK运行的时候检查这个标志位,如果上一个TASK正在运行,那么这个TASK就不运行直接退出了,呵呵,多谢啦