Timer & sleep()

我在做一個東東,要定時從某些地方讀取消息  
  例如,每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就不運行直接退出了,呵呵,多謝啦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章