今回はスレッド処理での落とし穴と言われる「スレッドの同期」部分の確認を、よく使われる銀行の共有口座を例として説明します。 同期の説明は問題となるエラーを確認後にしますので、まず先に問題を起こすプログラムを作成してみます。 処理はアプレットとし、次のような仕様にします。
今回のスレッド処理は顧客の入金処理ですから、顧客クラス(Threadクラスを継承)上にあるrun()メソッドが入金処理になります。 5名分のスレッド処理を開始するのは、Threadクラスのstart()メソッドを5回実行することになりますが、 その後でアプレット上に残高を表示する記述をしても、メソッドの実行順序には関係せず最初の方で表示されてしまいます。 これを防ぐためにThreadクラスのjoin()メソッドがあり、実行後に各スレッド処理の完了を待ってから次の処理へ行くことを保障してくれます。