排他制御 ファイルはzipフォルダに納められています。解凍ソフト(Aladdin Expander等)を使って解凍して下さい。 @座席クラスの設計 フィールドの設計 残り座席数を記録する変数を用意します。
コンストラクタ・ゲッタの設計 コンストラクタでは、残り座席数を初期化します。
残り座席数を返すメソッドを作ります。
A発券センターの作成 フィールドの設計 Ticketクラスのオブジェクトと発売開始時刻をチェックするフラグは下記の様にします。
コンストラクタ BorderLayoutで「NORTH」に発券パネルを置き、中央に駅パネルを置きます。 ゲッタメソッド 発売開始時刻を過ぎたかどうかを返すゲッタメソッドを作ります。
Ticketクラスのオブジェクトを返すゲッタメソッドを作ります。
発券センターパネルクラス 座席数を示すパネルとスタートボタンを載せます。 スタートボタンクラス スタートボタンが押されたら、「startFlag」を「true」にします。
駅パネルクラス 3×3のグリッドレイアウトにします。 B駅の設計 フィールドの設計 @メインフレームのオブジェクト
Aスレッドクラスのオブジェクト
B画面に表示する言葉を保存
C駅番号を保存
コンストラクタ
paintComponent(表示)
TicketRaceクラスで駅パネルに駅を載せる 駅パネルのコンストラクタで、駅を9つインスタンス化して、GridLayoutの枠に1つずつ載せます。 Cスレッドの実行をトレースMS-DOSの画面にスレッドの実行の様子を表示 現象を確かめる為には、TicketThread.javaの54行目のtakeSeatメソッドの呼び出し時にスレッド名を渡し、takeSeatメソッドでは、以下の様にMS-DOSに出力する命令を加えて、実行の様子をトレースしてみましょう。 スレッドの実行を制御 MS-DOS画面に表示された様にBのプログラムは、9つのスレッドが発売開始を知って、一斉に動いた為に、残席有りになって終う様な事が起きたのです。 有るスレッドが処理を実行している間は、他のスレッドが途中で割り込めない様にする事を排他制御と言います。
|