如果我没有同步这个方法,我会得到错误的值?

时间:2014-03-13 12:08:24

标签: java asynchronous crc

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

如果我不同步,那么大量的线程会遇到这种方法我会针对特定线程得到错误的crc吗?

3 个答案:

答案 0 :(得分:5)

不,只要你不使用任何共享变量就可以了。 bytescrc是每个线程的本地。这就是为什么它们被称为局部变量。

答案 1 :(得分:3)

这是static方法。通常,当您处理对象的thread safety时,您需要担心state。例如,如果您要更改CRC16类本身内部的值,但您不是。您的函数只接受输入bytes并返回输出crc.getValue()

答案 2 :(得分:1)

扩展其他答案,线程扩展关于可见性和范围的Java语言,仅关于代码的执行模式,这意味着只有单个对象可以访问的值或者哪些是只有在本地有效才不需要进行同步 - 只有在多个对象(类的静态字段或单个实例,其中所有访问者都返回相同的对象)之间共享值时,同步才值得哲学化。