3

このドキュメントを読んだとき、Java HBase API でアプリ固有のラッパーを作成していました。

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

それは言うThis class is **NOT THREAD SAFE**.

スレッドセーフではないということは、正確にはどういう意味ですか。私は基本的に C++ プログラマーであり、誰かがその関数strtok()がスレッド セーフではないと言った場合、マルチスレッド環境では使用しません。そのようなものstrtok()は、静的変数を使用し、2 つの異なるスレッドによってこの関数を呼び出すことはお勧めできません。

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 は、複数のスレッドによって呼び出される場合があります。何らかの方法で Result を使用するのは安全ではありませんか?

4

3 に答える 3

4

スレッドセーフではないということは、正確にはどういう意味ですか。

これは、指定されたクラス オブジェクトがさまざまな経由でアクセスされる場合、Threadsそれらの中でそのメソッドを呼び出すとThreads、さまざまな 間の不要な相互作用のために予測できない結果になる可能性があることを意味しますThreads。この予測不可能な結果の基本的な理由は、さまざまな 間での同じdataの共有です。スレッドセーフの詳細については、ウィキペディアの記事を参照してください。objectthreads

コードを調べた後、メンバー変数を使用していることがわかり_tableますresult = _table.get(get);。したがって、おそらくそうではありませんThread-safe

于 2013-04-04T20:43:28.147 に答える