繁体   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