読書会(JAVA CONCURRENCY IN PRACTICE)第2回議事録

[ 戻る ]


「Java Concurrency in Practice」を読む会 第2回議事録

日時:2006年08月19日(土) 10:00〜17:00
場所:高津市民館第4会議室

参加者(敬称略):高橋(徹)、岩室、村山、門脇、小林、小松、関沢、吉本、根本、遠藤、早川、小川

○自己紹介

 (宿題) yieldの実装はどうなっているのか?

○3.2 publication and escape

 privateフィールドのsetter/getterで漏洩する。
  →特にListをget/setしてしまうと、外から変更されてしまう。
  →FindBugsでチェックできるはず。

 コンストラクタ中の内部スレッドのスタートは危ない。
  →内部クラスは外部クラスのフィールドにアクセスできるので、コンストラクタが終わる前にスレッドが走ってしまう。
  →Javaのメモリモデルとの関係はどうなっているのだろうか?

 (宿題)スレッドスタート時に保障されている条件は?

 finalクラス、finalフィールドでもコンストラクタの最後でthisを使うのはN.G.
finalはコンストラクタ終了後に決まるから。

 public int MAX = 5; のようなコードで5が設定されるタイミングは?
  →コンストラクタで行われる。javapで確認できる。

 原本P.341の確認
  → この意味の理解はあとの読書会で。
 
 変数の代入、可視性、スレッドスタートの関係は?

 ファイナルクラスのコンストラクタの最後でスレッドを開始するのは問題ないか?
  →VMではコンストラクタの最後の後になにかやっているはずなので、コード上の一番最後でもN.G.

 (宿題)happens-beforeの定義を調べる。

 Java入門でメモリモデルをかかないのはだめだよね!?
  →排他制御をしらないプログラマがいる。だからエレベータが動かない事件がある。(冗談)

 mainメソッドにてJFrameを生成し、JButtonを生成し、setvisible(true)は本当はよくない。

 (宿題)EventDispatchスレッドは下記コードのどこで動くのか?
    public static void main(String[] args){
     JFrame frame = new JFrame();
     ...
     frame.getContentPane().add(button);
     ...
     frame.setVisible(true);
    }

 EclipseのVEはエディタビューを生成したときにEventDispatchしている。

 (宿題)正しいGUIの立ち上げ方は?
   →多くの入門書が正しくないと推測されるので、入門書にダメだしする。(冗談)



 (宿題)イベントディスパッチはデーモンスレッド?
   →デーモンじゃないはず。
 
 (宿題)c言語でスレッドを動かしてメインを殺した場合の振る舞いは?

○3.3 Thread confinement

 Confinement の訳は、ダグリー本によると「限定」

 Ad-hocの訳は悩みどころ。「場当たり的」はどうか?

 volatileについて、著者は気をつける必要があると言っている。

 intのインクリメントはAtomicでないことに注意。

 Listing 3-9のListing
  →loadTheArkメソッドの The Ark はノアの方舟のつがいをつくるプログラム。
  →ark変数はstatic変数であるはす。歴史的に方舟は1つだから。
  →SpeciesGendarComparetorは種と性別でソートする。
  →addAllの時に別スレッドがCandidatesを削除したときはどうなる?
   →例外発生。
  →途中でアニマルが食われてもよいようにするには?
   →1. 呼び出し元が対処をする。
   →2. VectorやCopyOnArrayListをパラメータにする。

 (疑問)Genericsを使ったコードの読み方は?
   →List  「リスト・カッコ・マップ・カッコトジ」?

 Listing 3.10
  →コネ区kしょんをとるのはいいが開放が面倒。簡便な方法はないか?

 (宿題)スレッドの終了を検知する方法は?

○3.4 Immutability

 Good Practiceの訳は?

○3.5 Safe Publication

 Effectivelyの訳が難しい。

 effectively immutableの例は?
  →setterが1回しか使えないと規約上決められたもの


○4.1 Designing a thread-safe class

 原書P.57の3行目あたり
  変数の上限下限はドキュメントされない際たるもの
  
 ServletContext自体にsetAttribute/getAttributeしたい例ってある?

○4.2 Instance confinement

 Hoareの1974年の論文を読む。(できれば。)

 Listing4.3のmyLockは、「Javaの鉄則」本によるとゼロ配列をつかうのがよいらしい。



 Java言語仕様でブロックに対してsyncronizedにした理由は?(変数のスコープの取り扱いがめんどくさくないか)
  →言語使用上シンプルにしたいから
  →アンロックを明示的にプログラマにやらせなくてよい。
  →etc..

以上

#お名前を間違えてしまいましたら申し訳ございません。>参加者の皆様


[ 戻る ]