デザインパターン入門【マルチスレッド編】備忘録
android開発を少しすることになってマルチスレッド周りの知識が残念な感じだったので、良い本だと噂の
を読んだので備忘録。
メモ
- synchronizedがあったら何か守るべきものがあると考える
- InterruptedException
- throws InterruptedExceptionがついているメソッドは以下のように認識すると良い
- 時間がかかる
- キャンセルできる
- Thread.interruptメソッドは直接InterruptedExceptionを投げるわけではなく、Threadをinterrupt状態にするだけ
- Threadがwait,sleep,joinなどの待ち状態のときにinterrupt状態を確認していて、interrupt状態の場合にInterruptedExceptionを自ら投げる
- 通常の処理を行っているときに急にInterruptedExceptionが発生することはない
- throws InterruptedExceptionがついているメソッドは以下のように認識すると良い
パターン図
いくつかパターンをピックアップして、PlauntUMLの練習がてら図で表してみる。
guard suspension パターン
ある処理を行うための条件(ガード条件)があり、条件が満たされている時にしか処理を行わない。
条件が満たされていないときは、条件が満たされるまで待つ。
@startuml CreateThread -> ComplexData : createData ClientThread -> ComplexData : getData note right: wait for creating complex data ... long data create process ... ComplexData -> CreateThread : finish createData note right: notify data is ready to waiting threads ComplexData -> ClientThread : return data ClientThread -> ComplexData : getData note right: return immediately if already data created ComplexData -> ClientThread : return data @enduml
気が向いたら他のパターンも。。
android AsyncTask
androidのAsyncTaskも1つの具体的目なマルチスレッドのパターンだなということで。
@startuml ClientThread -> DownloadFileTask : execute DownloadFileTask -> UIThread : onPreExecute activate UIThread UIThread -> DownloadFileTask : return onPreExecute deactivate UIThread DownloadFileTask -> BackgroundThread : doInBackground activate BackgroundThread DownloadFileTask -> UIThread : onProgressUpdate activate UIThread UIThread -> DownloadFileTask : return onProgressUpdate deactivate UIThread DownloadFileTask -> UIThread : onProgressUpdate activate UIThread UIThread -> DownloadFileTask : return onProgressUpdate deactivate UIThread ... BackgroundThread -> DownloadFileTask : return doInBackground deactivate BackgroundThread DownloadFileTask -> UIThread : onPostExecute activate UIThread UIThread -> DownloadFileTask : return onPostExecute deactivate UIThread @enduml