Monthly Archives: 11月 2010

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

Posted on by 0 comment

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

第10章 生存事故を防ぐ

  • 10-2 デッドロックの防止と診断
    • 10-2-1 時間制限付きのロック
    • 10-2-2 スレッドダンプによるデッドロックの分析
  • 10-3 そのほかの生存事故
    • 10-3-1 飢餓状態
    • 10-3-2 応答性の劣化
    • 10-3-3 ライブロック
  • まとめ

第11章 実行性能とスケーラビリティ

  • 11-1 実行性能について考える
    • 11-1-1 実行性能 vs. スケーラビリティ
    • 11-1-2 実行性能のトレードオフ

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

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

第II部 並行アプリケーションの構造を作る

第9章 GUIアプリケーション

  • 9-3 長時間のGUIタスク
    • 9-3-3 SwingWorker
      • l.1 …スレッドで動かしてしてGUIの応答性を…
  • 9-4 共有データモデル
    • 9-4-1 スレッドセーフナデータモデル
    • 9-4-2 データモデルを分割する
  • 9-5 シングルスレッドのサブシステムのそのほかの形
  • まとめ

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

第10章 生存事故を防ぐ

  • 10-1 デッドロック
    • 10-1-1 ロック順デッドロック
    • 10-1-2 動的なロック順デッドロック
      • List 10-3 何故内部クラスを使用しているのだろう?メソッドではダメ?
    • 10-1-3 協力するオブジェクト間のデッドロック
    • 10-1-4 オープンコール
    • 10-1-5 資源デッドロック

「Java並行処理プログラミング」第20回(11月19日)

Posted on by 0 comment

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

第9章 GUIアプリケーション

  • 9-1 GUIはなぜシングルスレッドか?
    • 9-1-1 逐次的なイベント処理
    • 9-1-2 Swingのスレッド拘束
  • 9-2 実行時間の短いGUIタスク
  • 9-3 長時間のGUIタスク
    • 9-3-1 キャンセル
    • 9-3-2 進捗報告と完了報告
      • p.225 List 9-8
        • l.5
          なぜtaskの可視性はデフォルトなのだろう?
        • l.13
          Void → void

「Java並行処理プログラミング」第19回(11月16日)

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

第II部 並行アプリケーションの構造を作る

第8章 スレッドプールを利用する

  • 8-3 ThreadPoolExecutorを構成する
    • 8-3-3 飽和ポリシー
      • l.10 キューに入れらないと
    • 8-3-4 スレッドファクトリ
    • 8-3-5 コンストラクションの後でThreadPoolExecutorをカスタマイズする
  • 8-4 ThreadPoolExecutorを拡張する
    • 8-4-1 例:スレッドプールに統計機能を加える
  • 8-5 再帰アルゴリズムを並列化する
    • 8-5-1 例:パズルのためのフレームワーク
  • ●まとめ

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

Posted on by 0 comment

参加者 沼田(読み手)、今井(記)
範囲 pp. 187- 198

第7章 キャンセルとシャットダウン

  • 7-4 JVMのシャットダウン
    • 7-4-3 ファイナライザ
      • p.187 7-4-3 l.3 行末
        ガーベッジコレタは → ガーベッジコレタは
  • まとめ

第8章 スレッドプールを利用する

  • 8.1 タスクと実行ポリシーの暗黙の結合
    • p.190 l.13 行頭
      されまるで → されるま
    • 8-1-1 スレッドの飢餓状態のデッドロック
    • 8-1-2 長時間のタスク
  • 8-2 スレッドプールのサイズを決める
    • p.194 計算式の意味は?
      たぶんこんな感じ

      • (1 + W/C) = (C+W)/C = タスク時間/計算時間
        = (計算時間/タスク時間)の逆数
      • U * (1 + W/C) = CPU稼働率 / (計算時間/タスク時間)
        = ウェイト時間をフルに他のタスクの計算時間に使用するとすれば(CPU稼働率を全て計算時間(の割合)で使用するとすれば)、いくつタスクを並行に動かすことができるか?
        = CPU一つあたり、いくつスレッドがあれば良いか。
      • N * U * (1 + W/C)
        = CPU N個で、いくつスレッドがあれば良いか。
  • 8-3 ThreadPoolExecutorを構成する
    • 8-3-1 スレッドの作成と破壊
    • 8-3-2 キューに入っているタスクを管理する

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

Posted on by 0 comment

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

第II部 並行アプリケーションの構造を作る

第7章 キャンセルとシャットダウン

  • 7-2 スレッドを使っているサービスを停止する
    • 7-2-3 毒薬
      • List 7-18 crawlメソッド以降のインデントがずれている。
      • 目印を置いておき、それがきたら終了するというやり方は番兵に似ているのでは。
    • 7-2-4 例:1回かぎりの実行サービス
    • 7-2-5 shutdownNowの制約
  • 7-3 スレッドの異常終了を扱う
    • 7-3-1 未補足例外ハンドラ
  • 7-4 JVMのシャットダウン
    • 7-4-1 シャットダウンフック
    • 7-4-2 デーモンスレッド

「Java並行処理プログラミング」第16回(11月5日)

Posted on by 0 comment

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

第7章 キャンセルとシャットダウン

  • 7-1 タスクのキャンセル
    • 7-1-5 Futureからキャンセルする
    • 7-1-6 インタラプトできないブロッキングの扱い方
      • p.169 List 7-11
        run()のwhileループの中、count==0 (in.read(buf)の戻りが0)の時は書かなくても良い?
        → in.read(buf)が0を返すのはbufの長さが0の時だけで、読み込むバイトが残っているときは、少なくとも1byteは読み込む。よって0の時は省略している?
    • 7-1-7 標準的でないキャンセルをnewTaskForでカプセル化する
      • p.170 l.7
        「インタフェイスをを定義し、」 → 「インタフェースを定義し、」
      • p.170 List 7-12
        • newTaskFor()にあるprotected<T>はどういう意味?
          → パラメータ化されたメソッド(ジェネリックメソッド)。protectedについているのではなく、戻り値型の前に<T>がついている。protectedとの間に空白が無くても良いみたいですが、見づらいですね。
        • newTask()内、SocketUsingTask.this.cancel() は、SocketUsingTaskインスタンスのcancel()を呼んでいる。
          エンクロージングクラス名.this とすると、エンクロージングインスタンスのthisを得ることができる。The Java Language Specification, Third Edition15.8.4 Qualified this 参照。
        • super.cancel()は、FutureTaskインスタンスのcancel()。
  • 7-2 スレッドを使っているサービスを停止する
    • 7-2-1 例:ログ記録サービス
      • p.175 List 7-15
        LoggerThread#run()内の二つの synchronized (this) は、synchronized (LogService.this) (原書Errataより)
    • 7-2-2 ExecutorServiceのシャットダウン
      • p.176 List 7-16
        start()は省略されていて、
        public void start() {
        は、その断片? stop()のインデントもおかしい。

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

Posted on by 1 comment

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

第II部 並行アプリケーションの構造を作る

第7章 キャンセルとシャットダウン

  • 7-1 タスクのキャンセル
    • List 7-1
      • BigInteger.ONE:BigInteger 定数 1
      • BigIntegerのnextProbablePrimeメソッド:この BigInteger より大きい最初の整数 (おそらく素数) を返すメソッド。
    • List 7-2
      • SECONDS:java.util.concurrent.TimeUnit.SECONDSと思われる。sleepメソッドはこの単位を使用して Thread.sleep を実行する。
    • 7-1-1 インタラプション
      • l.10 List5-10の掲載ページは p.112ではなくp.108
    • 7-1-2 インタラプションポリシー
    • 7-1-3 インタラプションへの応答
    • 7-1-4 例:実行時間の制限
      • Threadのjoin(ミリ秒)メソッドはこのスレッドが終了するのを、最高で millis ミリ秒待機する。