java保證一個方法只能執(zhí)行一次的問題
java保證一個方法只能執(zhí)行一次
我們經(jīng)常會遇到一些情況需要某一個方法或者操作只執(zhí)行一次,比如說配置信息加載,如果配置信息需要動態(tài)刷新,這個不在適用范圍。
下面列舉幾種方式
- 第一種 如果是web容器,可以使用servlet或者Listener
- 第二種 如果使用spring容器,則可以直接使用注解@PostConstruct
- 第三種 main直接執(zhí)行,可以寫在靜態(tài)代碼塊
static{
}- 第四種 封裝成一個方法,使用AtomicBoolean來進行判斷是否已執(zhí)行,或者使用同步鎖來保證原子性
java讓一個方法一分鐘只能被調用一次
可以使用 Java 中的計時器(Timer)和定時任務(TimerTask)配合使用實現(xiàn)一個每分鐘只能被調用一次的方法。
具體實現(xiàn)步驟如下
定義一個靜態(tài)變量
lastCalledTime:用于保存上一次方法被調用的時間戳。
在方法中獲取當前時間戳。
如果當前時間戳與上一次調用時間戳之差小于一分鐘,則返回不執(zhí)行,否則執(zhí)行該方法并更新
lastCalledTime:變量為當前時間戳。
以下是示例代碼
public class MyClass {
private static long lastCalledTime = 0;
public synchronized void myMethod() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastCalledTime < 60000) {
return;
}
// 執(zhí)行方法操作
lastCalledTime = currentTime;
}
}這里使用了關鍵字 synchronized,確保多線程環(huán)境下僅有一個線程可以進入 myMethod() 方法。
需要注意的是,如果方法執(zhí)行時間超過一分鐘,在調用間隔的限制下仍然可能會導致同時執(zhí)行的問題。
此外,由于計時器本身也會占用系統(tǒng)資源,如果過度濫用此方法限制,可能會影響應用程序整體性能。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
IDEA運行Java項目報錯java: 錯誤: 不支持發(fā)行版本 xx的解決方法
這篇文章主要介紹了IDEA運行Java項目報錯java: 錯誤: 不支持發(fā)行版本 xx的解決方法,文中有詳細的解決方案供大家參考,對大家解決問題有一定的幫助,需要的朋友可以參考下2025-04-04
IDEA創(chuàng)建Maven項目一直顯示正在加載的問題及解決
這篇文章主要介紹了IDEA創(chuàng)建Maven項目一直顯示正在加載的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java 將 byte[] 轉換為 File 對象的具體代碼示例
本文介紹Java中將字節(jié)數(shù)組轉換為File對象的方法,通過FileOutputStream實現(xiàn),適用于文件上傳下載等場景,提供具體代碼示例,操作簡單實用,感興趣的朋友跟隨小編一起看看吧2025-04-04
SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情
這篇文章主要介紹了SpringBoot整合SpringSession實現(xiàn)分布式登錄詳情,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08
java?HttpURLConnection類的disconnect方法與http長連接詳解
這篇文章主要介紹了java?HttpURLConnection類的disconnect方法與http長連接,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Java類的繼承實例詳解(動力節(jié)點Java學院整理)
在Java開發(fā)中,我們常常用到繼承這一概念,可以說繼承是Java這類面向對象編程語言的基石,今天小編一起和大家一起學習java類的繼承2017-04-04

