JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區 » 基本API  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 Timer 中使用 Thread.wait 的問題
jimwayne





發文: 220
積分: 0
於 2011-11-07 16:24 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟目前寫的程式希望讓程式固定每 6 小時去伺服器檢查版本更新
檢查到有新版本時就把新版本的檔案下載下來
不過下載的這個動作會在指定的時間才執行
因此有可能檢查到新版本以後等一個禮拜才會執行下載
但不知道這樣會不會造成事件被堆疊的問題?

例如設定下載時間固定是每星期六半夜 3 點
星期一中午 12 點時 Timer 被初始化,每 6 小時執行一次 TimerTask.run()
1
2
3
Timer timer = new Timer();
VersionUpdateAgent updateAgent = new VersionUpdateAgent();
timer.schedule(updateAgent, 0, 3600000);

VersionUpdateAgent 是 extend TimeTask
其中 VersionUpdateAgent.run() 的內容就是「檢查版本 → 有新版本時等待到下載時間 → 下載檔案」
如果當某次 updateAgent 被執行時發現有新版本,它就會執行 Thread.wait() 一直等到星期六
但是 Timer 在 6 小時以後又會執行一次 updateAgent (這裡先叫它 updateAgent<2> 來跟第一次執行的 updateAgent 做區別)
這個第二次被執行的 updateAgent<2> 應該一樣也會去檢查版本、等待到星期六?
那這樣從星期一下午 6 點到星期六半夜 3 點之間不是就會累積一大堆 updateAgent <N> 在等待下載?@@

1、想請問不知道小弟這樣的認知對不對?還是說 Timer 定時執行如果遇到前一個 TimeTask 尚未執行結束時,它會放棄執行?
2、如果這個狀況是有可能發生的,那想請問有沒有解套的方法呢?或者小弟應該改成什麼樣的寫法來達成定時檢查跟下載的目的?


reply to postreply to post
Java 工作者,但仍然是個初心者.....
作者 Re:Timer 中使用 Thread.wait 的問題 [Re:jimwayne]
kentyeh





發文: 648
積分: 6
於 2011-11-07 16:33 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
排程不用自已寫了吧,直接使用現成的排程函式庫吧!
quartz


reply to postreply to post
作者 Re:Timer 中使用 Thread.wait 的問題 [Re:jimwayne]
jk47





發文: 159
積分: 0
於 2011-11-07 17:37 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不解!有新版本卻要等到固定時間下載
那倒不如等到固定時間到才檢察並同時下載
假設這樣可行(符合需求)
那寫帶有MAIN方法的程式
用WINDOWS或LINUX的排程 即可 沒必要寫執行緒去做 除非有特殊需求
若一定要去檢查是否有新版本
還是可以用WINDOWS或LINUX的排程 工具
只是程式中再確認是否是需要載的那一天
這樣就什麼問題沒有了

另外樓主原本的做法 其實再修改一下就好
既然每六小時檢查一次
那麼只要在檢查到有新版本時
同時再判斷是否是下載日
如果是下載日就下載
如果不是下載日就不理它
這樣就不會有推疊的問題
同時也不用管 從發現新版本到下載日之間 更新了幾個版本 用戶端要如何更新的問題了
以上幾個想法 供您參考


reply to postreply to post
喝著濃濃的JAVA,看著MYSQL耀出水面
旁邊NetBeans抓著GlassFish與DUKE在嬉鬧
現在手上又拿著ORACLE在研究
(ORACLE=甲骨文=契文)
作者 Re:Timer 中使用 Thread.wait 的問題 [Re:jk47]
jimwayne





發文: 220
積分: 0
於 2011-11-09 12:04 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
有新版本卻要等到固定時間下載
那倒不如等到固定時間到才檢察並同時下載

其實是因為目前的設定是檢查新版本以後會由伺服器排定下載時間
以防止一堆機器在同時間一起去跟伺服器下載檔案,造成伺服器負荷過重
所以在檢查版本之前不會知道何時才能夠下載~。

不過感謝大大的提點!小弟後來也決定採用大大的建議
確認下載時間之後如果時間還沒到就什麼也不做
直到下載時間會在這一次檢查的區間時才開始等待下載。


reply to postreply to post
Java 工作者,但仍然是個初心者.....
» JWorld@TW »  Java 新手區 » 基本API

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8