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

解决方案 »

  1.   

    sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行
    可能不能达到你的目的(因为你不可能知道要sleep多久)
    看用wait()和notify()行不难道不能把timer定时长一点啊
      

  2.   

    使用SingleThreadPool,但必须要JDK1.5+
      

  3.   

    SingleThreadPool???
    没听过,请赐教
      

  4.   

    SingleThreadPool  我们做的项目是用JDK1.4的哇,唉,有没有更好的办法啊?
    to gefengxztg(戈峰)   
    谢谢你哇
    sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行
    可能不能达到你的目的(因为你不可能知道要sleep多久)
    看用wait()和notify()行不难道不能把timer定时长一点啊
    sleep()方法在要求同步时,没有释放当前监视锁,其他的线程并不能获得执行 这个是什么意思啊?
    另外,这个东东,对时间要求不准确,但是一定要保证不能在其中一个消息在处理的时候另外一个消息也会被同时处理
      

  5.   

    就是如果程序在同步方法或同步块中
    如果一个线程进入里面,然后sleep()
    这时候别的对象是进不去的,因为它没有释放锁
    只有该线程出同步方法或同步块,其他线程才能进入执行
      

  6.   

    如果对时间要求不准确
    直接把timer间隔时间变长些不就可以啊
    我觉得sleep()好像挺占资源的
      

  7.   

    但是我不知道TIMERTASK那个TASK会运行多久哈
      

  8.   

    那能不能用wait()和notify()组合实现呢
      

  9.   

    不晓得哇,那么复杂
    现在的方案是,设置一个标志位,每次TIMERTASK运行的时候检查这个标志位,如果上一个TASK正在运行,那么这个TASK就不运行直接退出了,呵呵,多谢啦