首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Web 多房間定時自動解鎖:Timer 本身即執行緒無需額外開線程

     編輯:程式設計綜合問答

場景

多個房間被鎖定,各需 5 分鐘後自動解鎖。問題:如何同時運行多個定時器?是否需要手動建立執行緒池?

核心結論

java.util.Timer 內部維護單一背景執行緒,**schedule 方法提交的 TimerTask 會在該共享執行緒中循序執行**,**無需也不應**為每個房間另開執行緒。

實作範例

Timer timer = new Timer(true); // daemon 執行緒,不阻止 JVM 退出

public void lockRoom(String roomId) {
    // 業務邏輯:標記房間鎖定
    timer.schedule(new TimerTask() {
        @Override public void run() {
            unlockRoom(roomId); // 5 分鐘後執行解鎖
        }
    }, 5 * 60 * 1000); // 延遲 5 分鐘
}

注意事項

  • 若解鎖邏輯耗時(資料庫操作、遠端呼叫),會**阻塞 Timer 執行緒**導致後續任務延遲。解決:run() 內提交至 ExecutorService 非同步執行,或改用 ScheduledExecutorService 直接支援執行緒池。
  • 叢集環境下單機 Timer 失效,需分散式排程(Quartz + 資料庫鎖、Redis 延遲佇列、XXL-Job 等)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved