Category Archives: Java並行処理プログラミング

「Java並行処理プログラミング」第36回(2月4日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 388 – 402

第IV部 高度な話題

第16章 Javaのメモリモデル

  • 16-2 公開
  • 16-2-1 安全でない公開
  • 16-2-2 安全な公開
  • 16-2-3 安全な初期化の慣用句(イディオム)
  • 16-2-4 ダブルチェックロッキング
  • 16-3 初期化の安全性
  • まとめ

付録A 並行処理のためのアノテーション

  • A-1 クラスのアノテーション
  • A-2 フィールドとメソッドのアノテーション
    • p.398 l.7
      ステート変数を加えて → ステート変数を加えて

訳者あとがき

————————

「Java並行処理プログラミング」読了。
次回から「SPINモデル検査入門」を読みます。

「Java並行処理プログラミング」第35回(2月1日)

Posted on by 0 comment

参加者 今井(読み手)、沼田(記)
範囲 pp. 381 – 388

第IV部 高度な話題

第16章 Javaのメモリモデル

  • 16-1 メモリモデルとは何か?なぜ必要か?
    • 16-1-2 順序変え
    • 16-1-3 Javaのメモリモデルを2000字以内で説明する
      • p.384 プログラム順序のルールは、データフローの関連のあるアクションがあれば順に実行されるということ?
    • 16-1-4 同期化の相乗り

「Java並行処理プログラミング」第34回(1月28日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 371 – 381

第IV部 高度な話題

第15章 アトミック変数とノンブロッキング同期化

  • 15-4 ノンブロッキングアルゴリズム
    • 15-4-2 ノンブロッキングな連結リスト
      • p.372 l.7
        ‘sentinel’はプログラミングの世界では普通“歩哨”ではなく“番兵” だよね。
    • 15-4-3 アトミックなフィールドアップデータ
      • p.375 下からl.8 ミススペル
        CoucurrentLinkedQueue → ConcurrentLinkedQueue
    • 15-4-4 ABA問題
      • p.376 下からl.6
        AtomicStampedReferenceとAtomicMarkableReferenceの従兄弟の関係ってどんな関係だろう? 親の親が同じクラス?
        → 実際はどちらも、java.lang.Objectのサブクラスでした。
  • まとめ

第16章 Javaのメモリモデル

  • 16-1 メモリモデルとは何か? なぜ必要か?
    • 16-1-1 プラットホームのメモリモデル

「Java並行処理プログラミング」第33回(1月25日)

Posted on by 0 comment

参加者 今井(読み手)、沼田(記)
範囲 pp. 360 – 371

第IV部 高度な話題

第15章 アトミック変数とノンブロッキング同期化

  • 15-2 ハードウェアの並行性サポート
    • 15-2-1 compare and swap(比較して入れ替える)
      • 1文目の命令の前の括弧は不要
        …コンペア・アンド・スワップ命令(以下CASと略記)…
    • 15-2-2 ノンブロッキングなカウンター
    • 15-2-3 JVMのCASサポート
  • 15-3 アトミック変数クラス
    • 15-3-1 “ベターな揮発性変数”としてのアトミック変数
    • 15-3-2 実行性能の比較:ロックvs.アトミック変数
  • 15-4 ノンブロッキングアルゴリズム
    • 15-4-1 ノンブロッキングスタック

「Java並行処理プログラミング」第32回(1月18日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 354 –360

第IV部 高度な話題

第14章 カスタムシンクロナイザを構築する

  • 14-6 java.util.concurrentのシンクロナイザクラスの中のAQS
    • 14-6-2 SemaphoreとCountDownLatch
      • p.354 List 14-16
        • tryAcquireShared()の型はなぜbooleanでなくintなのだろう?
          AQS APIをみると、三つ表現しているようです。
          負: 失敗
          0: 排他的に成功
          正: 非排他に成功
        • tryReleaseShared()はtrueしか返さないので、型はvoidでも良いのでは?
          AQSではbooleanで定義されている。実装によってはtryReleaseShared()がfalseを返すこともあり、List 14-16のSemaphoreの実装ではfalseを返すことがないだけ。
    • 14-6-3 FutureTask
    • 14-6-4 ReentrantReadWriteLock
  • まとめ

第15章 アトミック変数とノンブロッキング同期化

  • 15-1 ロックの不利な点
  • 15-2 ハードウェアの並行性サポート

「Java並行処理プログラミング」第31回(1月14日)

Posted on by 0 comment

参加者 今井(読み手)、沼田(記)
範囲 pp. 342 – 353

第IV部 高度な話題

第14章 カスタムシンクロナイザを構築する

  • 14-2 条件キューの使い方
    • 14-2-6 サブクラスの安全性の問題
    • 14-2-7 条件キューをカプセル化する
    • 14-2-8 入り口と出口のプロトコル
  • 14-3 明示的な条件オブジェクト
    • 明示的なLockはLockインタフェースの実装のことだから英字で書かれているのだろう
  • 14-4 シンクロナイザの解剖学
    • List 14-12 のrelease()メソッドはブロックしないからInterruptedExceptionはthrowしないのだろう
  • 14-5 AbstractQueuedSynchronizer
    • 14-5-1 簡単なラッチ
  • 14-6 java.util.concurrentのシンクロナイザクラスの中のAQS
    • 14-6-1 ReentrantLock

「Java並行処理プログラミング」第30回(1月7日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 333 – 342

第IV部 高度な話題

第14章 カスタムシンクロナイザを構築する

  • 14-1 ステート依存を管理する
    • 14-1-3 条件キューが助けてくれる
      • p.333 14-1-3 l.2
        それはトースターが焼けたという → それはトーストが焼けたという ???
        一行上のトースターの“パンが焼けましたよ”の合図のベル
        は、原書では、the “toast is ready” bellなので、
        ここのyour toast is ready
        それはトースターが焼けたという → それはパンが焼けたという
        が適当だと思う。
  • 14-2 条件キューの使い方
    • 14-2-1 条件述語
    • 14-2-2 早すぎるウェイト終了
    • 14-2-3 シグナル喪失
    • 14-2-4 通知
    • 14-2-5 例:ゲートクラス

「Java並行処理プログラミング」第29回(12月28日)

参加者 今井(読み手)、沼田(記)
範囲 pp. 318 – 333

第IV部 高度な話題

第13章 明示的なロック

  • 13-3 公平性(fairness)
    • p.318 最後の行の「公平性のペナルティはほぼ2倍です」とは、何をどう比較して2倍といっている?
  • 13-4 synchronizedとReentrantLockの使い分け
  • 13-5 リードライトロック
  • ●まとめ

第14章 カスタムシンクロナイザを構築する

  • 14-1 ステート依存を管理する
    • 14-1-1 例:事前条件の失敗を呼び出し側に広める
    • 14-1-2 例:ポーリングと休眠による荒削りなブロッキング
      • †3 Grampy→Grumpy

「Java並行処理プログラミング」第28回(12月21日)

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 309 – 317

第IV部 高度な話題

第13章 明示的なロック

  • 13-1 LockとReentrantLock
    • 13-1-1 ポーリングによる入手と時間制限付きの入手
    • 13-1-2 実行性能への配慮
      • p.315 本文下からl.5
        ふつのtry/finallyによる → ふつうのtry/finallyによる

「Java並行処理プログラミング」第27回(12月17日)

参加者 今井(読み手)、沼田(記)
範囲 pp. 294 – 307

第III部 生存、実行性能、試験

第12章 並行プログラムを試験する

  • 12-2 実行性能を試験する
    • 12-2-2 複数のアルゴリズムを比較する
    • 12-2-3 応答性を計測する
  • 12-3 試験の落とし穴を避ける
    • 12-3-1 ガーベッジコレクション
    • 12-3-2 動的コンパイル
      • 下から5行目の「Fig.12-4」は「Fig.12-5」の誤り
    • 12-3-3 コードパスの非現実的な拾い方
    • 12-3-4 争奪の非現実的な激度
    • 12-3-5 デッドコードの排除
  • 12-4 試験を補完するテクニック
    • 12-4-1 コードレビュー
    • 12-4-2 静的分析ツール
    • 12-4-3 アスペクト指向の試験テクニック
    • 12-4-4 プロファイラと監視ツール
  • ●まとめ