複数のスレッドに関する問題を避けるために、ほとんどの場合StringBufferを使用したコードがありますが、StringBufferが必要な一般的なケース(ほとんどの場合)では対応できません。 。私はこの方法以下のようにしている場合マルチスレッド環境でのStringBuilderの使用
- このメソッドは、複数のスレッドによって使用されるにもかかわらずprivate String getPath(){ return new StringBuilder("a").append("b").toString(); }
それは大丈夫でなければなりません。 (?) 新しいStringbuilderを作成しているため、すべてのスレッドはスタック(参照)に独自のコピーを持ちます。
メソッドの引数としてStringBuilderを取得している場合のみ問題になります。
「このメソッドは複数のスレッドで使用されますが、大丈夫です」とはどういう意味ですか?マルチスレッドの主な問題(ロックが実装されていない場合)は、共有データの一貫性です。文字列を複数のスレッド間で共有し、それらのうちのいくつかがスレッドに書き込むことができる場合、各スレッドは異なる文字列値を読み取ることがあります。毎回関数から新しい(定数値)文字列を作成する場合、そのような問題はありませんが、とにかくconst文字列値を返すこともできます。だから私はあなたが正しい変数の値を返そうとしていると思いますか? –
上記の例では、各スレッドはgetPath()メソッドを呼び出し、毎回新しいStringBuilderをインスタンス化し、文字列を返します(これは不変です)。だから、私はこの場合StringBufferを使用する必要がありますか? – Ouney
私はあなたが信じていないと信じています –