[英]How to call a subclass' method more than once if I don't know how many times I'll have to do that?
[英]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
?
不,沒關系,只要你不使用任何共享變量。 bytes
和crc
是每個線程的本地。 這就是為什么它們被稱為局部變量。
這是一種static
方法。 通常,當您處理對象的state
時,您需要擔心thread safety
。 例如,如果您正在更改CRC16
類本身內部的值,但您不是。 您的函數只接受輸入bytes
並返回輸出crc.getValue()
。
擴展其他答案,線程不擴展關於可見性和范圍的Java語言,僅關於代碼的執行模式,這意味着只需要一個對象可以訪問的值或者只在本地有效的值不需要同步 - 僅如果在多個對象之間共享值(類的靜態字段,或者所有訪問者返回相同對象的單例實例),則同步值得哲學化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.