LoginSignup
0
0

【コツコツ学習】StringBuilderとStringBufferの比較(スレッドセーフも)

Last updated at Posted at 2024-04-09

背景

以下でStringBuilderとStringBufferについて以下を学びました
StringBuilderの方がパフォーマンスが良い
・StringBuilder:スレッドセーフじゃない
・StringBuffer:スレッドセーフ

スレッドセーフとは何ぞや

複数のスレッドが同時に同一のデータやリソースにアクセスしたとき、予期せぬ問題やデータの不整合が発生しないように設計されたコードのことを指します。
「並行処理を行っても安全」という意味らしいです。

並行処理というのは、コンピュータが複数の処理を同時に行うことです。

つまり複数のスレッドが同時に同じデータを読み書きすると、データが予期せず上書きされたり、一部のデータが更新されないまま使われたりする可能性があり、スレッドセーフなコードは、このような競合状態を防ぐために重要であるということなんだなー

文字列に関してはスレッドセーフであるべきか

ローカル変数で用いるのであればスレッドセーフでなくても問題なさそうなのでStringBuilderでよいと思いました

ローカル変数以外は複数のスレッドから共有され得る
Javaの変数は,ローカル変数だけがスレッドセーフ(複数のスレッドが同時に動作しても異常をきたさないこと)で>ある。その理由は,ローカル変数はスレッドごとに割り振られる「Javaスタック」と呼ぶメモリー領域に格納される>からだ。これに対して共有メモリーである「ヒープ領域」に格納されるインスタンス変数やクラス変数は,複数のス>レッドが共有する可能性があり,スレッドセーフではない。そのため,参照または更新するときにはロック(更新メ>ソッドにsynchronizedキーワードを指定する)などを検討しなければならない

感想

StringBuilderを自然と使っていたけどこんな背景があるんだなーと
面白い

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0