多執行緒併發變數作用域及執行速度造成獲取的資料錯誤

2021-08-30 15:03:46 字數 529 閱讀 8266

接到同事的問題反饋報告,說之前的守護程式在獲取部分配置的時候,會出現資料有時正確有時錯誤的情況。於是,趕緊從**庫中拖出相應版本的**進行閱讀,第一反映是這種問題應該不存在。但經過仔細測試後,確實存在這樣的問題。

**大致如下:

public class serviceuserconfig extends service

private refreshuserconfig(int userid)

private refreshconfig(int userid)

public useroutputbuffer excute(int userid)

}

如果多個執行緒併發執行以上**,可能會出現如下情況:

a執行緒執行excute(15)

b執行緒執行excute(17)

稍後得花點時間將之前的這種設計模式做一定調整,在此先記錄一下。

之前,一直覺得原來的同事這個框架做得還健壯,沒想到還存在這樣的問題。以後得花時間看看所有的**了,做到提前知曉心理有數。

作用域及變數

作用域 重點 什麼是作用域,就是乙個變數可以生效的範圍 變數不是在所有地方都可以使用的,而這個變數的使用範圍就是作用域 全域性作用域 全域性作用域是最大的作用域 在全域性作用域中定義的變數可以在任何地方使用 頁面開啟的時候,瀏覽器會自動給我們生成乙個全域性作用域 window 這個作用域會一直存在,...

Js 變數及作用域

一 變數包含兩種不同資料型別的值 基本型別值 引用型別值 1 基本型別值 1.簡單的資料段,被儲存在棧記憶體中 2.按值訪問 3.不能給基本型別的值新增屬性 4.從乙個變數向另乙個變數複製值時,會建立這個值的副本,兩個變數不相互影響 2.引用型別值 1.值是儲存在記憶體中的物件,儲存在堆記憶體中 2...

執行環境及作用域

1.變數 基本型別和引用型別的值 可以直接操作儲存在基本資料型別變數中的值 基本資料型別值在記憶體中佔據固定大小的空間,因此儲存在棧中 操作引用資料型別,實際上是操作物件的引用,而不是直接操作記憶體物件 因為js不允許直接訪問記憶體中的位置 引用資料型別的值實際上是放在記憶體中的物件。但是給物件新增...