Effective java 3版 読書会 19日目

実施日時:2019/6/11 22:10~23:10
対象範囲:項目79~項目80
参加者:yodai、yoridori、kassyi
形式:オンライン(discord)
   課題本を事前に読み、実業務と照らし合わせて記述内容の
   議論をする。

項目79 過剰な同期は避ける
同期はやりすぎるとそこがボトルネックになる可能性が有る
316ページのobserver.addedが異質なメソッドであり、外から渡されたものであり、P318の上のソースコードがその実装である。
また、この例だと同期した結果の差分だけ見る感じがする
CopyOnWriteArrayListの例だとsynchronizedする必要が無い。
同期処理でListを使う場合は、コンカレントコレクションを使うと良い。
加えて、CopyOnWriteArrayListのパフォーマンスは悪いがその使い勝手は良い。
可変クラスを作成する場合、同期をせずに外部から同期をさせるようにするか、
内部的にクラスをスレッドセーフにするかの2通りがある
スレッドのプログラムは、ConcurrentHashMapなどを使うべき

項目80 スレッドよりもエグゼキュータ、タスク、ストリームを選ぶ
Executors.newCachedThreadPoolは小さなプログラムや軽いサーバーに良い
スレッドは処理を作成するものであり、実行するものはExecutorである
P323、高負荷ではキャッシュのスレッドサービスを使うのはよろしくない
スレッドをたくさん作って処理が一杯になることは避けるべき。
newFixedThreadPool(int nThreads)は、スレッドの最大数を設定できる。
大きさを設定した方がCPU使用率を下げられる

協力:Tech Baton
https://tech-baton.studio.design/

この記事が気に入ったらサポートをしてみませんか?