微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 当有人说“结果不是线程安全”时,这是什么意思

当我阅读这篇文档时,我正在编写一个特定于应用程序的 Java HBase API包装器:

http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Result.html

它说这个班级不是威胁安全**.

它的确是什么意思不是线程安全的.我基本上是一个C程序员,如果有人说函数strtok()不是线程安全的,我就不会在多线程环境中使用它.像strtok()这样的东西使用静态变量并且通过两个不同的线程调用这个函数并不是一个好主意.

JAVA是否一样?

我有一个功能

public String get(String key,String family) {
    Get get = new Get(key.getBytes());
    get.addFamily(family.getBytes());

    Result result = null;
    try {
        result = _table.get(get);
    } catch (IOException e) {
        // Todo Auto-generated catch block
        e.printstacktrace();
    }
    return "";
}

函数get可能由多个线程调用.是否会以某种方式使用结果不安全?

解决方法

What exactly does it mean by not thread safe.

这意味着如果通过各种线程访问给定的类对象,则在这些线程中调用方法可能会导致不可预测的结果,因为各种线程之间不需要的交互.这种不可预测结果的基本原因是在各种线程之间共享对象的相同数据.您可以在Wikipedia Article这里查看有关Thread-safety的更多信息.

完成代码后,我发现你在行result = _table.get(get)中使用了成员变量_table; .所以,最有可能的是它不是线程安全的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐