Monthly Archives: 10月 2010

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

Posted on by 0 comment

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

第6章 タスクの実行

  • 6-3 並列化できる箇所/すべき箇所を見つける
    • 6-3-1 例:逐次的なページレンダラ
      • p.142 List 6-10
        イメージをダウンロードするループとダウンロードしたイメージを描画するループを分けているのはなぜだろう? 逐次的なページレンダラではひとつのループでやっても良いと思う。
    • 6-3-2 結果を返すタスク:CallableとFuture
    • 6-3-3 例:Futureを使うページレンダラ
    • 6-3-4 異質なタスクを並列化する限界
    • 6-3-5 CompletionService:ExecutorがBlockingQueueと合体
    • 6-3-6 例:CompletionServiceを使ったページレンダラ
    • 6-3-7 タスクに時間制限を設ける
    • 6-3-8 例:旅行予約ポータル
  • まとめ

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

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

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

第6章 タスクの実行

  • 6-1 タスクをスレッドで実行する
    • 6-1-1 タスクを逐次的に実行する
    • 6-1-2 タスクのためのスレッドを明示的に作る
    • 6-1-3 制限のないスレッド作成の欠点
  • 6-2 Executorフレームワーク
    • 6-2-1 例:Executorを使ったWebサーバ
    • 6-2-2 実行ポリシー
    • 6-2-3 スレッドプール
    • 6-2-4 Executorのライフサイクル
      • List 6-8
        • startメソッドのcatch節でif文で状態をチェックをしてからログを出力しているのは、シャットダウン中以外にこの例外が発生するのは異常な状態だからログに残しているのだろうか。
        • 下から3行目で red となっているのは req の誤植だろう。
    • 6-2-5 タスクの遅延開始と周期的実行

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

Posted on by 0 comment

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

第5章 並行処理の構築部材

  • 5-5 シンクロナイザ
    • 5-5-3 セマフォ
      • p.114 List 5-14
        なぜremove(Object o)の引数の型は、TではなくObjectなのだろう。
        → java.util.Setインタフェースに合わせてあるのだと思う
    • 5-5-4 バリヤ
  • 5-6 効率的でスケーラブルなリザルトキャッシュを構築する
    • p.121 List 5-18
      Future<V>とFutureTask<V>があるけど間違い?
      → いいえ。Futureはインタフェースで、FutureTaskはその実装クラスのひとつ。どちらもjava.util.concurrentパッケージにあります。
  • 第I部のまとめ

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

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

第5章 並行処理の構築部材

  • 5-3 ブロッキングキューとプロデューサ・コンシューマパターン
    • 5-3-1 例:デスクトップサーチ
    • 5-3-2 シリアルスレッド拘束
    • 5-3-3 両頭キューとワークスティーリング
      • 2つ目のパラグラフに「ほかのワーカーのキューにアクセスするときはヘッドでなくテイルにアクセスするので、やはり奪い合いは起きません。」とあるが、スレッドが3つ以上の場合は奪い合いが起きたりしないのだろうか。
  • 5-4 ブロックとインタラプトされるメソッド
  • 5-5 シンクロナイザ
    • 2つ目のパラグラフの2文目:役をこなせま「」が
    • 5-5-1 ラッチ
    • 5-5-2 FutureTask
      • landerThrowableを使う意味は?
        Errorは異常な状態なので再throw、チェックされる例外はロジックのエラーだからRuntimeException(IllegalStateException)に変換してthrowし、元々のRuntimeExceptionをふるいにかけている?

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

Posted on by 0 comment

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

第4章 オブジェクトを組み立てる

  • 4-5 同期化ポリシーをドキュメントする
    • 4-5-1 曖昧なドキュメンテーションを解釈する

第5章 並行処理の構築部材

  • 5-1 同期化コレクション
    • p.91
      Javaは、5.0は’.0’がついて、6はつかない?
      → そのようです。「JDK™ 5.0 ドキュメント」のページには、「この外部バージョン番号は 5.0 であり、内部バージョン番号は 1.5.0 です。」とあり、「JDK™ 6 ドキュメント」のページには、「製品バージョン番号は 6 であり、開発者バージョン番号は 1.6.0 です。」とあります。
    • 5-1-1 同期化コレクションの問題点
    • 5-1-2 イテレータとConcurrentModificationException
      • p.94
        5-1-2見出し、Coucurrent → Concurrent
    • 5-1-3 隠れイテレータ
      • p.97 l.3
        retainAllってどんなメソッド?
        → Collectionインタフェースに定義されているメソッド。
        boolean retainAll(Collection<?> c)
        c に格納されている要素だけを保持して、その他の要素をこのコレクションから削除する。
  • 5-2 並行コレクション
    • 5-2-1 ConcurrentHashMap
    • 5-2-2 Mapのアトミックな操作
    • 5-2-3 CopyOnWriteArrayList

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

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

第4章 オブジェクトを組み立てる

  • 4-3 スレッドセーフを委譲する
    • 4-3-1 委譲を使う車両追跡管理クラス
    • 4-3-2 独立のステート変数
    • 4-3-3 委譲が使えない場合
    • 4-3-4 ステート変数を公開する
    • 4-3-5 例:ステートを公開する車両追跡管理クラス
      • †6
        p.xを参照してからp.yを参照するまでの間にsetが呼ばれた場合のこと?
  • 4-4 既存のスレッドセーフな機能を増やす
    • 4-4-1 クライアントサイドロック
    • 4-4-2 組み立て
      • List 4-16
        if (!contains)でないとおかしい。あるいはList 4-13や4-15のように変数名をabsentにしてboolean absent = !list.contains(x)とし、return absentとしたほうがよいのでは。

        ↑原書のErrataに載っていました(上から10個目のp.74に関するもの)。