HBaseの0.20と0.89.20100621を見比べていて、HTablePoolというクラスの存在に気付いた。(最初、新規クラスと勘違いしたが、0.20にもちゃんと有った^^;)
HTableインスタンスをプールして使い回すものらしいけど、ということは、HTableはスレッドセーフではないということ?
と思って改めてHTableのJavadocを見たら、「書き込みに関してはスレッドセーフではない」と明記されていた(意訳なので解釈を間違っている可能性も…)。
確かにput()の実装を見ると、フィールドのArrayListに単純にadd()してたりするので、明らかにスレッドセーフではない^^;
逆にget()やgetScanner()はスレッドセーフであると解釈できる。
スキャンはScan関連インスタンスをメソッド内で作成しているだけなのでたぶん大丈夫、get()はコネクションクラスのメソッドを呼んでいるので、ぱっと見ただけでは判断できないが、たぶん大丈夫なのだろう。
じゃぁHTableを継承しているTransactionalTableはどうなんだろう?と思ったが、Javadocには何も書かれていない…。
put()とかはHTableのものをそのまま使うと同様にアウトだろうけれども、トランザクション用のput()は独自実装だから大丈夫な可能性もある…?
まぁ、「スレッドセーフである」と明示されていない以上は、「スレッドセーフでない」と仮定してプログラミングするのが常道ではあるのだが…。