読書会(Javaスレッドプログラミング)第5回議事録

[ 戻る ]


「Javaスレッドプログラミングを読む会」第5回

日時: 2001/03/20 10:30 - 
場所: 新宿勤労会館 第二洋室
参加者(敬称略): 高橋(徹)、佐藤、秋元、武川
朗読者: 高橋(徹)
書記: 武川

P166 2.5 ロックユーティリティーの利用

P167 L5 再可能性とは何か?

→もしかしたら再入可能性の間違い?

2.5.1 Mutex

Mutexは Mutual Exclusiveの略だがlockという言葉が入らない。

2.5.1.1 メソッドアダプター

P.172 幾分より大きなオーバヘッドを引き起こす....とはどこのことか?
→new Runnable()の部分のことと思われる。
→JUnitではtestメソッド毎にスレッドを起動している。

2.5.1.2 バックオフ

ロックアップってなに?
→よくないことらしいというのはわかる。
→デッドロックと何が違うのか?
→ロックをしにいって、デッドロックを起こすこと?
→自分自身をロックすること? 

Mutexk#acquireを二度呼ぶとロックしてしまうか?
→する。

2.5.1.3 再順序化

何かより高くつく後退戦略を調整することってなに?
→ロックを解放することなどのことではないか?

再順序を使用する必要があるコールバックやコレクションの具体的な例はないのか?

2.5.1.4 ブロック化されないロック

Thread.interuptの使い方の具体例はないのか?
→3.1.2.1節で詳しい話がのっている。

ListUsingMutexの利点は?
searchメソッドでロックを持ち続けないので性能向上が期待できる場合がある。

2.5.1.5 ロック順序マネージャ

2.5.2 読み込み - 書き込みロック

ReadWriterLockは、
EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock
で実装されている。
EDU.oswego.cs.dl.util.concurrent.ReadWriterLockはインタフェースの定義のみ。

2.5.3 参考文献

3 状態依存

3.1 失敗への対応

P183 一番下の行 (2.3節を参照)って2.3のどこを指しているのか?


P184 L4 その制約条件に依存した....成立し続ける必要はない。
→「必要はない」ではなく「限らない」の誤りと思われる。

3.1.1 例外

3.1.1.1 緊急停止

3.1.1.2 継続

付随的な例外を発生させる失敗に......の意味は?
→こんな感じ 
try{
        ファイルアクセス処理<---ここで例外      
}finally{
        try{
                f.close();
        }catch(Exception ee){ // <--- 付随的な例外は無視
        }
}

3.1.1.3 ロールバック

Mementoパターンとは?
→ある時点での状態を保存するためのパターン

3.1.1.3 ロールバック

P187 例えば、もしメソッドがログファイルに処理をログし....の意味

→実際のログファイルにはログは書かれているが、ログを読みだす際の
処理で"ログのXYZエントリを無視しなさい"という部分を見つけた場合
にその部分を無視して他のエントリを表示をするといった動作を意味する。
他の例としては、^Hのような端末制御文字も同じような意味ではないか?

3.1.1.4 ロールフォワード

3.1.1.5 再実行

ランダムに遅延を入れるという方法は普遍的に使われているのか?
→イーサネットプロトコルで使われている。
→頻繁に利用される場合は無駄が多い。

3.1.1.6 ハンドラ

P.191の図 インターフェース部分でメソッドの上にもう一つ線がいる。
(フィールドの欄が必要) 

3.1.2 キャンセル

P193 注1 cancellation は 新英和中辞典にも載っているので、普通の単語なのではな
いか?
3.1.2.1 割り込み

キャンセルのリクエストからシャットダウンまで平均1万5千命令かかるとは?
以下のような擬似コードを考えてみる。
void run(){
        try{
                while(true){
                        //1万命令の処理
                        if(Thread.interrupted()){
                                throw new InterruptedException();
                        }
                }
        catch(InterruptedException e ){
        //1万命令の処理                                                 
        }
}

例外処理 + キャンセル処理の平均時間(最大1万、最小0)  
= 10000 +  5000(平均)                 
= 15000

P195 6段落目 もしスレッドが割り込み状態.....の意味
→こんなかんじか?

class HogeHoge {
volatile boolean isInterrupted = false;

void run()
{
    try{
    while(true){
        ignoreMethod(); //割り込みを無視するメソッド
        if(Thread.interrupted() || isInterrupted == true){
            throw new InterruptedException();
        }
    }
    }catch(InterruptedException e ){
        //割り込み処理
    }

}

public void ignoreMethod(){
    try{Thread.sleep(1000);}catch(InterruptedException ){};
}

}
----別スレッド

        HogeHoge hogehoge = new Hogehoge();
        Thread thread = new Thread(hogehoge)
        thread.start();

        //呼出し側は割り込みする際にisInterruptedを指定する。        
        hogehoge.isInterrupted = true;
        therad.interrupt();

3.1.2.2 IOとリソースの取り消し

P.196 のソースの意味は?
→IOオペレーションの途中でスレッドをキャンセルする例。

ファイルディスクリプタなどの資源はガーベージコレクションされるのか?
→されないはず。

P.198 readメソッドで1文字ずつ読むのは重くないのか?
→Bufferdなクラスを使えば、問題ないのでは?
→実際試してみたほうがよい。

3.1.2.3 非同期な終了

P.200 L5 Thread.stopの効果はより一層危険なものになります の具体的意味は?
→キャンセルが非同期に行なわれるにもかかわらずに、Thread.interruptと同様に
例外をキャッチしてしまえば、中止の処理自体が無視できるから一層危険ということで
はないか。

---本書とは直接関係ないがその他の話題----


*Antによるメイク環境の作成について
 Antは結構奥が深いというはなし。
*JUnitによる単体テスト環境の作成について
*AspectJをつかって任意の場所で例外を出すテストをする話
 秋元さんがまとめて報告してくれる予定。
*バグトラッキングシステムでいいものはないか?
 (Java Press Vol17 でGNATの紹介をやるらしい。)
*Java Web Startのはなし。
 けっこう使える?セキュリティのはなしなど。
*JavaDocにThreadSafeタグを追加するはなし。
*WebDAV Httpを拡張してクライアント側からサーバの文書を書換える仕組み
*wikiwikiのはなし
*クラスの依存関係を出力するツール JDepend というものがあるらしい。
*デザインパターンの機能引きが欲しいというはなし
 MS Officeの解説本のように、「こういう場合はこういうパターンを使う」
 といった本があると便利だね。というはなし
 
*JavaPress No.15を秘密の場所に隠しました。 

次回 4/21 10:00 より 新宿勤労会館 第二洋室 
P200 3.1.2.4 リソースの管理からです。


[ 戻る ]