2019/10/01:スレッドによる同時処理
スレッドを起動する(thread)
コード上の複数の箇所の処理が同時に行われるような仕組みをスレッド(thread)と呼び、コード上で処理の流れを増やすことを
スレッドを起動するという。
スレッドを起動するためにはクラスライブラリのThreadクラス(java.langパッケージ)
を拡張したクラスを作成することが必要で、Threadクラスを拡張したクラスには
そのなかにrun()メソッドを定義し、このメソッドに処理を記述しておくと
その処理が、これまでとは異なる処理の流れのスタート地点になります。
スレッドの一時停止(sleep)
sleep()メソッドというものを使うことで、起動したスレッドを一時停止することができる。
利用する際にはtry~catchでメソッドから送出される可能性のある
例外を記述しないとコンパイルが通らない。
スレッドの終了を待つ
別のスレッドの終了を待って、自分の処理を再開する仕組みを利用するにはjoin()メソッドを使います。
別のスレッドの作成方法
Javaでは2つ以上のクラスから多重継承することが出来ない為Threadクラスとそのほかのクラスの2つをスーパークラスにする事は出来ない。
このような時、クラスライブラリのRunnableインターフェイス(java.langパッケージ)
というものを使いスレッドを起動する仕組みを作ることが出来る。
Threadクラスを拡張するのではなく、Runnableインターフェイスを実装するコードを書きます。
スレッドを起動する二つの方法
・Threadクラスを拡張する
・Runnableインターフェイスを実装する
同期処理(synchronized)
複数のスレッドが共有するフィールドなどを処理すると処理タイミングにより矛盾が生じる場合があります。
このような不具合を避ける為には、あるスレッドが振り込み処理を
している間は別のメソッドは処理が出来ないようにする必要があります。
メソッドにsynchronizedと言う指定を付けると、あるスレッドが
メソッドを処理している間は、他のスレッドは子のメソッドを呼び出すことが出来なくなる。
※スレッド同士の処理のタイミングを取る仕組みを同期と言う。