代码之家  ›  专栏  ›  技术社区  ›  tiagomac

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

  •  2
  • tiagomac  · 技术社区  · 11 年前
    public static int getCRC16(byte[] bytes) {
        CRC16 crc = new CRC16();
        crc.reset();
        crc.update(bytes, 0, bytes.length);
        return (int) crc.getValue();
    }
    

    数以吨计的线程将命中此方法,如果我不同步,我会出错 crc 对于特定线程?

    3 回复  |  直到 10 年前
        1
  •  5
  •   Niels Bech Nielsen    11 年前

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

        2
  •  3
  •   christopher    11 年前

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

        3
  •  1
  •   Smutje    11 年前

    扩展其他答案,线程可以 扩展Java语言的可见性和范围,这意味着只有一个对象可以访问或仅在本地有效的值不需要同步-只有当值在多个对象(类的静态字段,或所有访问器返回同一对象的单实例)之间共享时,同步才值得哲学思考。