[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 1523] 読書会 (Java スレッドプログラミング ) 第 3 回議事録



佐藤@iplです。

私はそれほどスレッドに詳しくないため、いつも話についていくので精一杯なの
ですが今回は背伸びして書記をさせていただきました。
私にとっての読書会は「Javaスレッド」の勉強もさることながら、会社とは離れ
て他の技術者との交流ができるという点がとても気に入っています。

それでは、1/20(土)に行われた「読書会(Javaスレッドプログラミング)第3回」
の議事録です。おかしい点など指摘していただけるとうれしいです。

□ 日時 : 2000/1/20 (土) 13:00から17:00まで

□ 場所 : 株式会社オレンジソフト 会議室

□ 参加者(敬称略) : 高橋(徹)、高橋(智)、石黒、秋元、佐藤

□ 当日のスケジュール
   1. 自己紹介
   2. 書記の選出(佐藤)
   3. 読書(読み手 石黒さん)
   4. 2次会

2.2.3 トラバーサル

◇「トラバーサル」の意味について

単語そのものには「横断する」「ジグザグに進む」などがあるが、ここでは
参照をたどって次から次へとオブジェクトへアクセスしていく様を表現している。

2.2.3.3 バージョンイテレーター

バージョンを使用することで設計上のミスを見つけることができる。
シングルスレッドでバージョンの例外が発生したら明らかにおかしい。

2.2.3.4 ビジター

某Javaデザインパターン本にVisitorパターンの例として、「総理大臣が外国の
代表や専門家から聞いたことを次の日にそのまま話す」というものがあるらしい。

2.2.4 スタティックとシングルトン

LazySingletonCounterクラスやEagerSingletonCounterクラスなどの仕組みは
以前この読書会で使っていた「Javaの格言」でも説明されていた。

LazySingletonCounterクラスとEagerSingletonCounterクラスのnext()
メソッドとreset()メソッドのsynchronized位置が異なるが、同じにしても
問題ないため、深い意味はないだろう。

Singletonパターンはインスタンスではなくクラスオブジェクトに対する
ロックのやり方を説明するために取り上げられているようだ。

StaticCounterクラスのようにまですると、グローバル変数と変わらない。

2.2.5 デッドロック

スワップは、上のレベルで解決する。

◇マルチパーティーとは

複数のオブジェクト上のロックを獲得する処理のこと。

2.2.6 リソースオーダリング

ロックする順番を順序付ける。

◇エイリアス検出とは

ここでは、自分と引数のオブジェクトを比較して行う。
C++では「Effective C++」にその辺のことが説明されている。

◇少しだけ高速なバージョンとは

otherをsynchronizedすることによって同期用のメソッドを呼ぶ必要がないから。
別のインスタンスでも同じクラスであればprivateなメンバにもアクセス可能で
あるが、直接アクセスしていると後の変更に対応しづらい。

2.2.7 Javaメモリーモデル

WindowsはシングルCPU推奨で、SolarisはマルチCPUが当たり前という話があった。

2.2.7.1 原子性

◇volatileについて

他からアクセスされる可能性があり、値設定直後に変更が反映されてほしいような
クリティカルな処理のメンバ変数には「volatile」をつけること!

スレッドストップ(廃止予定のメソッド)の代わりにフラグを使う。
このフラグをvolatileにする。

2.2.7.2 可視性

原子性だけでなく、可視性を考えた場合、どんなものにもvolatileをつける必要が
ある。
ただし、以下の二つの問題がある。

・OSやJVMが対応していなければいけない。
・毎回メインメモリに書き直すため、オーバーヘッドになる。

並列プログラミングにおけるロックは、分散プログラミングでのメッセージを送る
ということと「メインメモリーへ強制的に値を反映させる」という点で同義である。

2.2.7.3 順序性

◇算術表現の評価について

他のスレッドの観点から言えることとして「結果は正しくても途中のある時点では
必ずしも正しいとは言えない」。

2.3 限定

限定とは外部へのもれがないこと。
4つのカテゴリーはオブジェクトが参照されるパターンである。

最後のカテゴリーの「〜解放する」とは、「引き渡す」の意味であろう。

2.3.1.1 セッション

セッションとは、open()→出力→close()のように一連の処理が完結していること
を指す。

2.3.1.2 その他のプロトコル

Pointクラスでオーバーライドせずにclone()を呼ぶとどうなるのだろうか?

P.117のコードがいけない理由は、display(p)とrecordDistance(p)の間でpの整合
性が保たれないから。display(p)でpにもれがある、とみる。

2.3.2.1 スレッド固有のフィールド

◇P.120〜P.121のリストについて

Thread.currentThread()によって呼び出したスレッドへの参照を取得できるので、
OutputStreamのoutputを引数渡ししなくても良いというメリットがある。

2.3.2.2 ThreadLocal

ThreadLocalは他のスレッドからの干渉を受けない。
「C MAGAZINE」の「恥ずかしながらドジりました」の昔の記事で取り上げたことが
あったようである。

以上「2.3.3 オブジェクト内の限定」の前まで、読み終わりました。

□ 2次会

読書会BOF(5名)のメンバーは、Java互助会の読書会メンバーの方々(3名)とで新宿
の玄の家という料理店で韓国料理を楽しみました。
メンバーには飲みやすいということで、まっこり(韓国のお酒)が人気でした。
また、韓国ではもてなす側は食べ切れないほどの料理を出して、食べる側は汚しま
くって全部食べ切ってはいけない、といった慣習があるということを知りました
(それが現在問題になっているとか)。
帰りには塩加減が絶妙な韓国海苔一袋をお土産に頂いちゃいました。ご飯をお茶碗
5,6杯ぐらいいけそうです。
食べ物の話ばかりですみません。(・・;)

-=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=-
 I Planning Corporation ... Engineering Application Group
 <Takayuki Sato> ... UML -> http://www.bigfoot.com/~patchy/
-=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=- -=-