[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 1534] Java スレッドプロ グラミングを読む会第 4 回議事録
こんにちは、Java スレッドプログラミングを読む会第 4 回
で書記を担当した武川です。議事録を送ります。
「Javaスレッドプログラミングを読む会」第4回
□ 日時 : 2000/2/24 (土) 10:00から17:00まで
□ 場所: 新宿勤労会館 第二洋室
□ 参加者(敬称略): 高橋(徹)、高橋(智)、亀田、布留川、武川、秋元、石黒
□ 当日のスケジュール
1. 自己紹介
2. 書記の選出(武川)
3. 読書(読み手 高橋(智)さん)
4. 2次会
P123 2.3.3 オブジェクトの限定
限定についてはP114を参照してください。
引渡しポイントとはなにか?
→P.127のCollections.synchronizedList
アグリゲーションの主要な意味を実装している?
→UMLの記法で「◆と◇」で意味が違ったとおもう。
◆の方はたしかに固定格納と同様の意味だったはず。
2.3.3.1 アダプタ
クラスBarePointはdouble型のフィールドなので、同期しない場合は
不正なdoubleの値になる可能性がある。
ホストがSynchedPointクラスで、部品がBarePointクラスになる。
ArrayList()が同期していたとしても、Iteratorをとってきた場合に
問題が発生しなかったか?
→そういう場合が考えられるときには、2.4.4節のコピーオンライトな機構を
作ればよいのではないか?
2.3.4 グループの限定
任意の重い公式の機構の例とはなにか?
→知的所有権や著作権とかの実世界の機構のはなしで、
リソースに関するはなしはないのではない。
"提供"のy#action()の実装は、なんでこんなに面倒なのか?
x.put(ref);
ref = null;
だけじゃだめなのか?
→上記の方法だとリソースが同時にxとyに存在する可能性があるため駄目。
2.3.4.1 リング
実際どんなときにこのような仕組を使うのだろうか?
→複数のクライアントがあるサービスを共有して使用する場合とかが
考えられるが、たしかにあんまり書く場面はないかもしれない。
P.133 PrintService#startUpServicesの predは何の略語?
2.4 クラスの構造とリファクタリング
リファクタリングとはなにか?
→システムの外部インターフェースを変えずに実装を向上させる技術。
メンテナンス性、再利用性を向上させることが目的。
→リファクタリングツールとしてinteliJというものがある。
http://www.intellij.com/products/renamer/
2.4.1 同期処理の削減
ごまかしの処理とはなにか?
→意図しない処理ということではないか。
「古さが受けいれがたいもの」の古さというのはどういう意味?
→ レジスタ上の値が変更されたが、メモリ上の値が更新されて
ないような場合ではないか?
longとdoubleについてはマルチスレッドのアクセスがある場合はvolatileにすべき。
もし危険を求めるならば...という表現は面白い。
アグリゲートってなに?
→限定をつかったクラス群のことではないか。
しかし、もしアグリゲーションや.....の文の意味がよくわからない。
→いまひとつ話についてけませんでした。
2.4.1.3 オープンコール
Pa141 LinkedCell のソースでvalue()がsynchronizedメソッドだが、
sum()で何度もvalue()をよんでいるのは効率悪くないか?
いっそのことsum()をsynchronizedしたほうがよいのではないか?
→nextがfinalであるという前提があるため、synchronized
を行なう場所がvalueを アクセスする部分に限定できるというのが主旨。
これによりロックが連鎖しない。 これに対してsumをsynchronizedすると、
全てのLinkedCell要素をロックしてしないと、sumメソッドが実行できない。
2.4.2 同期処理の分離
2.4.2.1
P144 の図中の矢印の上のhelperの意味は?
→helperというロールもしくは関係があるという意味ではないか。
PassThroughShapeで何がよくなったのか?
→adjustLocation()と adjustDimensions()が同時に実行できるようになった。
ならば、LocationとDimensionを最初から別のクラスにすべきではないか?
Shapeという単位でアクセスしたい。図形なので位置とサイズは別々より、
一つのオブジェクトとして存在したほうが使いやすい。
2.4.2.2 ロックの分割
パススルー版とロック分割版のShapeクラスのどっちが好みか?
→1つのクラスにまとまっているからロック分割版。
→機能がわかれているからパススルー版。
二つのロックが共に必要になった場合はどうする?
→ロック分割版は、二つのロックを使用するように変更する。
→パススルー版
2.4.2.3 フィールドの分離
フィールドを単純にvolatileと宣言するのはなぜ不十分なのか?
→以前の値を返すsetメソッドなどがある場合(P148のソース)は、volatileでは
排他制御ができない。
2.4.2.4 リンクされたデータ構造
LinkedQueueのputとpollの中でそれぞれlastとheadをsynchronizedしているのはなぜ?
→要素数が0か1の場合lastとheadが同じになるところがミソ。
2.4.3 読み込みのみのアダプタ
Java3Dは結構速いらしい。下手にJava2Dを使うくらいだったら、
3Dで書いたほうがよい場合もある。
2.4.4
2.4.4.1 内部的なコピーオンライト
P158のソース中 IndexOutOfBoundsException を NoSuchElementException に変換
しているが、コールスタック表示が途中で切れてしまうのでは?
→この場合は、すぐ前でエラーがおこっているのがわかるが、
例外を変換する場合は、前の例外をフィールドに持ってコールスタック
表示時にどこで例外が発生したかわかるようにすべき。
2.4.4.2 楽天的な更新
ライブロックとはなにか?
→複数のスレッドがある処理を失敗して、再実行するということを
繰り返す場合のこと。
2.4.4.3 原始的なコミット
CompareAndSwap命令とはなにか?
→TestandSet命令と似たようなもの?
指数的なバックオフスキームとはなにか?
→失敗するごとに、再実行するまでの期間を指数的に増やす方法
スピンするって普通に使われる?
→まわすが普通じゃないのか?
moveToがcommitを持たないのはなぜ?
→moveToは以前の値に依存しないため、commitする必要がない。ただし、
synchronizedなメソッドである必要がある。
shiftXは以前の値に依存するのでcommitする必要がある。ただし、
synchronizedなメソッドである必要はない。
2.4.5 オープンコンテナ
内部ロック、外部ロックとは?
→内部のロックは部品のロックで、外部のロックはホストのロック
2.4.5.1 内部規則
「しかし3.3.4節を参照。」ってよく意味がわからない。
部品のロック
2.4.5.2 外部規則
aPrt.getLock()のサンプルコードはないのか?
2.4.5.3 マルチレベルの制約
2.4.6 参考文献
以上です。
その他の話題としては、以下のようなものがありました。
Dynamic Proxy
JDK1.3の新機能
JDKドキュメントのdocs\ja\guide\reflection\proxy.html
AspectJ
アスペクト指向のツール
テスト用に一時的なメソッドを追加するのに使えるみたい。
http://www.ogis-ri.co.jp/otc/hiroba/Report/oopsla/oopsla.html
http://semicom2.u-shizuoka-ken.ac.jp:8080/~dayz/ddr/AspectJ.html
なんかが参考になりそうです。
JUnit
テスト環境。日本語の資料が少ない。以下のページは結構役にたつ。
http://www.alles.or.jp/~torutk/oojava/maneuver/2000/6-3.html
Ant
マルチプラットフォームな環境でのmake環境を構築するには便利。
□次回の予定
3/20 午前10:00 より 新宿勤労会館 第二洋室 の予定です。
□感想
感想としては、今回も非常に勉強になりました。ここの
議事録には書いてないことでも(書けないor書くの忘れた)
ためになる話がいろいろ聞けておもしろかったです。
それにしてもスレッドは奥が深いです。
高橋(徹)さんもいってましたが
「知れば知るほど、プログラングが出来なくなる」
というかんじです。
#でも書くんですけど。
この本とはあまり関係ないかもしれませんが、
JUnit、Ant、AspectJについては、仕事に役立ちそうなので、
次回までに少し勉強しようと思います。
#余裕があればDynamic Proxyも。。。
あと、事前に本を読まれないという人が結構いて、それでも非常に
理解されているようなので、事前に1,2回読んで、さらに本番でも
読んで、それでも結構難しいと思っている自分にとっては、
ちょっとショックでした。でも、多分、前もって一回読まないと
ついていけないので、やっぱり僕は読み続けると思います。
以上、よろしくおねがいします。
-------------
武川 努
takekawa@xxxxxxxxxxxxxx