デザイン: 3 つのチケット窓口で同時に 20 枚のチケットを販売します。
プログラム分析: 1. 投票数には同じ静的な値を使用する必要があります。
2. 同じ数の投票が売られないようにするには、Java マルチスレッド同期ロックが必要です。
プログラムのアイデア: 1. ステーション クラス Station を作成し、Thread を継承し、run メソッドを書き換えます。
2. runメソッドでチケット販売操作を実行します。同期ロックはチケット販売に使用されます。つまり、あるプラットフォームがこのチケットを販売すると、他のプラットフォームはこのチケットが売り切れるまで待つ必要があります。」
3. mainメソッド呼び出しクラスを作成する
フローチャート:
// 3 つの窓口で同時に 20 枚のチケットを販売
パッケージ ThreadStation;
public class Station extends Thread {
//構築メソッドを通じてスレッドに値を代入します
publicStation(文字列名) {
super(name);//スレッドに値を代入します
}
// 投票数の一貫性を保つために、投票数は静的である必要があります
staticint ティック = 20;
//静的キーを作成する
staticObject ob = "aa";//値は任意
// runメソッドを書き換えてチケット購入操作を実現する
publicvoid run() {
while(ティック> 0) {
同期 (ob) {//ロック
//入る人は鍵を手に持ち、外出後に鍵を取り出す
if(ティック> 0) {
System.out.println(getName() + "販売" +tick + "チケット");
カチカチ--;
}それ以外{
System.out.println("チケットは完売しました");
}
}
試す{
sleep(1000);//1 秒間休憩します
}catch(割り込み例外 e) {
e.printStackTrace();
}
}
}
}
パッケージ ThreadStation;
パブリック クラス MainClass {
/*
* Javaマルチスレッド同期ロックの使用
*/
publicstatic void main(String[] args) {
//各ウィンドウ オブジェクトをインスタンス化し、各ウィンドウ オブジェクトに名前を付ける
Stationstation1=新しいステーション("ウィンドウ 1");
Stationstation2=新しいステーション("ウィンドウ 2");
Stationstation3=新しいステーション("ウィンドウ 3");
// 各オブジェクトの動作を開始します
station1.start();
station2.start();
station3.start();
}
}
この実験では主に Java 環境でのマルチスレッドの使用法を学びました。3 つのウィンドウが同時に 20 枚のチケットを販売しました。複数のウィンドウが同時に同じチケットを販売しないようにするために、スレッド同期戦略を採用しました (スレッドが他のスレッドからメッセージを取得しない場合、スレッドは待機する必要があり、メッセージが到着したときに起動されます)。
この実験は 2 つの部分に分かれており、Thread クラスを継承し、実行インターフェイスを実装します。セマフォ Semaphore は 20 です。tick>0 の場合、プログラムを実行する権利を取得するために静的キー ob が作成されます。tick の実行が終了すると、スレッドは 1 秒間スリープし、プロセスを解放し、ロックし、セマフォを減らします。
この実験を通じて、スレッド同期に関するインスタンスの操作についてはよく理解できましたが、この Java プログラム設計には実際的な問題もいくつかあり、実験では 1 ウィンドウ 1 票の問題を考えました。窓口が複数のチケットを同時に販売する場合のマルチスレッドの問題は考慮されておらず、同時スレッドの概念である他のチケット窓口との重複したチケット販売も生成されず、時間関連のエラーも生成できません。