読書会(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
[ 戻る ]