加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:08:59 所属栏目:Java 来源:网络整理
导读:当我阅读这篇文档时,我正在编写一个特定于应用程序的 Java HBase API包装器: http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Result.html 它说这个班级不是威胁安全**. 它的确是什么意思不是线程安全的.我基本上是一个C程序员,如果有人说
当我阅读这篇文档时,我正在编写一个特定于应用程序的 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; .所以,最有可能的是它不是线程安全的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读