簡體   English   中英

如果我沒有同步這個方法,我會得到錯誤的值?

[英]If I don't synchronize this method I'll get wrong values?

public static int getCRC16(byte[] bytes) {
    CRC16 crc = new CRC16();
    crc.reset();
    crc.update(bytes, 0, bytes.length);
    return (int) crc.getValue();
}

大量的線程會遇到這種方法,如果我不同步我會得到一個特定線程的錯誤的crc

不,沒關系,只要你不使用任何共享變量。 bytescrc是每個線程的本地。 這就是為什么它們被稱為局部變量。

這是一種static方法。 通常,當您處理對象的state時,您需要擔心thread safety 例如,如果您正在更改CRC16類本身內部的值,但您不是。 您的函數只接受輸入bytes並返回輸出crc.getValue()

擴展其他答案,線程擴展關於可見性和范圍的Java語言,僅關於代碼的執行模式,這意味着只需要一個對象可以訪問的值或者只在本地有效的值不需要同步 - 僅如果在多個對象之間共享值(類的靜態字段,或者所有訪問者返回相同對象的單例實例),則同步值得哲學化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM