際際滷

際際滷Share a Scribd company logo
マルチスレッド僥の
 ミッシングリンク
  Satoshi Kobayashi
      2013/02/09



                      1
はじめに

マルチスレッドのアプリケ`ション
    いてますか




                   2
ちなみに


ぼくはちょっと念までけませんでした




                     3
そのの吭R

マルチスレッドこわい

     なんかすごいことになるんでしょ

やばいバグが竃るんでしょ

     しかもつけられないんでしょ



                        4
余圭もoい

 synchronized ってどこにつけるの

            とりあえずつけときゃいいの

concurrent パッケ`ジつかっときゃいいの

            どうOすればいいの

                ☆ 銚忽冱Z: Java
                               5
書


富しは撹Lした




          ☆ ような櫃する...
                         6
とはいえ

書でもそんなに徭佚があるわけではない

書でも吭Rはそんなに笋錣辰討い覆

 マルチスレッドは卆隼としてこわい




                     7
採が笋錣辰燭里

  やみくもにこわい
     ◎
 ぐたいてきにこわい




             8
云}


マルチスレッドの僥にはミッシングリンクがある




               ☆ ような櫃する...
                              9
どういうこと

マルチスレッドのとあるw侭について
  h苧しているものが富ない




                    10
kwsk
A プログラム冱Zの秘T



B マルチスレッドを鵑砲靴娠



C ぐぐる



                   11
マッピングしてみる
渇鷆: 互

            スレッドの古廷       A   B   C

  (ぼくの吭Rではここに採かあるのににh苧しているものが富ない)



          デザインパタ`ンなど          B   C

         光冱Z阿離好譽奪 API        A   C

渇鷆: 詰


                                      12
それは

  古廷參貧
デザインパタ`ン隆
  のなにか




             13
たぶん


ア`キテクチャ?パタ`ン




                14
で、採よ


          圻t
仝スレッドgで慌嗤されるオブジェクトを吭Rする々




                           15
仝輝隼でしょ々って繁


  この枠iむ駅勣ないです




                16
そうなの燭辰独


 ここからh苧していきます




                17
ただし

スレッドの古廷や API のh苧は

      A   C

     にjります




                    18
マルチスレッドのヤバさ

栽

デ`タの音屁栽が軟きる

デッドロック

ザ?ワ`ルド




              19
栽
スレッド A       慌嗤オブジェクト                    スレッド B



         get: 100

                                 get: 100
     set: 100 + 10


                              set: 100 + 10

                     110 ?!
                                                  20
デッドロック
スレッド A       慌嗤A   慌嗤B      スレッド B


      lock
                         lock

   lock (block)


                     lock (block)




                                     21
それは岑ってるよ


採絞聞い硬されたh苧を書厚




                 22
慌宥遒需えるから

       どちらも
仝}方のスレッド々が仝慌嗤オブジェクト々
      を荷恬している




                       23
つまり

  マルチスレッドでk伏する}は
仝}方のスレッド々が仝慌嗤オブジェクト々
   を荷恬しているときに軟こる




            ☆ より醤悶議には筝
           (きzみ) 荷恬を根むとき
                            24
剃に冱えば

 慌嗤オブジェクトがoい泙蠅
マルチスレッドでも}は軟こらない




                    25
醤悶箭

Tomcat で Servlet API を聞ってプログラミング

 マルチスレッドについて吭Rすることは (おそらくほとんど) 駅勣ない


採絞か

 スレッドgでオブジェクトを慌嗤していないから

 光ワ`カスレッドはリクエストg了で伏撹される
 畠くe?の HttpServletRequest オブジェクトを隔つ




                                      26
どう吭Rすればいいのか


 慌嗤オブジェクトをスレッドセ`フにする




                       27
つまり
スレッド A   慌嗤オブジェクト   スレッド B



   こいつらのことは
   蒙に櫃砲靴覆

              こいつはいつ採r
              K双に柵ばれても
              措いように笋┐

         スレッドセ`フ
                             28
この圻tを尖盾すると

マルチスレッド?デザインパタ`ンなども
     尖盾しやすくなる




                      29
Producer-Consumer パタ`ン
Producer                     Consumer
                  Queue
スレッド                         スレッド

           碧並弖紗

                          碧並函誼

           碧並弖紗

                          碧並函誼




                                        30
わかること

スレッドgでオブジェクトを慌嗤している

しかも採かきzんでいる

Queue がスレッドセ`フでないと}が軟こる




                           31
Thread-Per-Task パタ`ン
Executor          Runner A   Runner B
スレッド              スレッド       スレッド

           碧並_兵



           碧並_兵




                                        32
わかること


スレッドgでオブジェクトを慌嗤していない

このパタ`ンは}を哈き軟こさない




                       33
まとめ
マルチスレッドの僥

ミッシングリンクがある櫃する

とても寄並なことなのに採絞かh苧が富ない

それは參和の圻t

スレッドgで慌嗤されるオブジェクトを吭Rする



                         34
ありがとうございました




              35

More Related Content

マルチスレッド僥楼のミッシングリンク