我有一行按計劃重復運行任務:
executor.scheduleAtFixedRate(() -> Task.scanTask(task), 0, scanEvery, unit);
我的問題是,每次執行時都會傳遞來自區域變數的“任務”引數嗎?或者它是否由執行程式快取,以便對區域變數的更改永遠不會在下一次計劃執行時使其成為 scanTask ?
依賴每個執行緒訪問當前本地值(不是執行緒安全的)是不好的做法嗎?
uj5u.com熱心網友回復:
由于代碼使用 Lambda 運算式,因此變數task必須是有效的常量。即它不必是最終變數,但它的值應該只在 lambda 之前設定一次,然后永遠不應該改變。并且同一個task物件將在執行緒中一次又一次地處理。
現在,如果task物件本身是一個串列或內??部有一個串列,并且如果它不斷變化,那么當執行緒被觸發時,無論串列中有什么值,這些值都將被處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349075.html
