同期の概念と方法:
ウィンドウクラス:
public class Ticket implements Runnable{
int tickets=20;//总共20张票
@Override
public void run() {
while (tickets>0) {
synchronized (this) {
if(tickets>0) {
//售票
try {
System.out.println(Thread.currentThread().getName()+"正在售票");
Thread.sleep(200);//模拟售票操作时间
tickets--;//完成售票
System.out.println(Thread.currentThread().getName()+"售票完成,"+"剩余"+tickets+"张票");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
テストクラス:
public class Test {
public static void main(String[] args) {
Ticket ticket = new Ticket();
//模拟三个窗口售票
Thread t1=new Thread(ticket);
t1.setName("窗口1");
t1.start();
Thread t2=new Thread(ticket);
t2.setName("窗口2");
t2.start();
Thread t3=new Thread(ticket);
t3.setName("窗口3");
t3.start();
}
}
試験結果:
ウィンドウ 1 がチケットを販売中
ウィンドウ 1 のチケット販売が完了しました。残り 19 枚です。
ウィンドウ 1 がチケットを販売しています
ウィンドウ 1 のチケット販売が完了しました、残り 18 枚のチケット
ウィンドウ 1 でチケットが販売されています
ウィンドウ 1 のチケットの販売が完了しました、残り 17 枚のチケット
窓口 3 窓口 3 でチケットを販売中
窓口 3 でのチケット販売が完了し、残り 16 枚です。
窓口 2 でチケットを販売中 a> チケットはウィンドウ 2 で販売されています。 窓口 2 でのチケット販売終了しました。チケットは 14 枚残っています。 窓口 2 でチケット販売中
窓口 2 でのチケット販売が完了し、残り 15 枚 チケットウィンドウ 2 でチケットを販売しています ウィンドウ 2 のチケット販売が完了しました。残り 12 枚です。 ウィンドウ 2 でチケットを販売しています。 ウィンドウ 2 で販売中ですチケット、残り 11 枚のチケットがあります ウィンドウ 2 でチケットが販売されています ウィンドウ 2 でチケットが販売されています 完了しました、残り 10 枚のチケットがありますウィンドウ 2 でチケットを販売しています ウィンドウ 2 のチケット販売が完了しました、残り 9 枚です ウィンドウ 2 でチケットを販売しています ウィンドウ 2 のチケット販売完了しました、残り 8 枚のチケット ウィンドウ 2 がチケットを販売しています ウィンドウ 2 のチケット販売が完了しました、残り 7 枚のチケット a> ウィンドウ 2 のチケット販売は完了しました。チケットは 0 枚残っています チケットはウィンドウ 2 で販売中 チケットは現在販売されていますウィンドウ 2 で販売中 チケットは 2 窓口で販売が完了し、残り 1 枚です。 チケットは 2 窓口で販売中です 窓口 2 はチケットを販売しています。チケットは 2 枚残っています 窓口 2 はチケットを販売しています。 窓口 2 はチケットを販売しています。チケットは 3 枚残っています。 ウィンドウ 2 でチケット販売中 ウィンドウ 2 チケット販売完了、チケット残り 4 枚 ウィンドウ 2 でチケット販売中 ウィンドウ 2 のチケット販売は完了しました、チケット残り 5 枚 ウィンドウ 2 はチケットを販売しています。 ウィンドウ 2 はチケットを販売しています。チケットは 6 枚残っています。 ウィンドウ 2 が販売中ですチケット
プロセスは終了コード 0 で終了しました
同期ロックなしのテスト結果:
ウィンドウ 3 がチケットを販売しています
ウィンドウ 1 がチケットを販売しています
ウィンドウ 2 がチケットを販売しています
ウィンドウ 1 はチケット販売中、残り 18 枚
チケットは窓口 1 で販売中です。
窓口 2 でのチケット販売は終了しました。チケットは 19 枚残っています。
窓口 3 でのチケット販売が完了し、残り 19 枚 チケット
窓口 2 でチケットが販売されています
窓口 3 でチケットが販売されています< /span> 窓口 3 のチケット販売は終了しました。チケットは 16 枚残っています。 チケット販売は次のとおりです。窓口 1 は終了しました。チケットは 15 枚残っています。 窓口 2 でのチケット販売中です。
窓口 2 でのチケット販売は終了しました。残り 16 枚です。 ウィンドウ 3 はチケットを販売しています。 ウィンドウ 3 はチケットを販売しています。チケットは 13 枚残っています。 ウィンドウ 1 のチケットは販売が完了しました。チケットは 14 枚残っています。 ウィンドウ 3 のチケットの販売が完了しました、2 枚のチケットが残っています ウィンドウ 1 のチケット販売が完了しました。残り 1 枚のチケット ウィンドウ 2 のチケット販売は完了しました、残り 0 枚のチケット ウィンドウ 3 はチケットを販売しています。残り 1 枚のチケットです。 ウィンドウ 3 はチケットを販売しています ウィンドウ2 はチケットを販売しています ウィンドウ 1 はチケットを販売しています 窓口1 枚のチケットの販売が完了しました、3 枚のチケットが残っています 窓口 2 のチケットは販売完了、残り 2 枚 窓口 3 でチケット販売中 チケット窓口 2 で販売中 チケットは窓口 1 で販売中です。 窓口 3 でのチケット販売は完了しました。チケットは 7 枚残っています。 窓口 1 でのチケット販売は完了しました。チケットは 5 枚残っています。チケットは残っています 窓口 2 でのチケット販売が完了しました。チケットは 5 枚残っています。 窓口 3 でチケットが販売されています ウィンドウ 2 でチケットを販売中 ウィンドウ 1 でチケットを販売中です。 ウィンドウ 3 のチケット販売が完了しました。残り 8 枚のチケットがあります。 窓口 1 でのチケット販売は完了しました。チケットは 8 枚残っています。 窓口 2 でのチケット販売が完了しました。チケットは 8 枚残っています。窓口 3 でのチケット販売が進行中です。 窓口 2 がチケットを販売しています 窓口 3 がチケットを販売中、残り 11 枚のチケットがあります 窓口 1 がチケットを販売中 ウィンドウ 1 のチケットは販売完了しました。残り 11 枚のチケットです。 ウィンドウ 2 のチケットは販売完了しました。残り 10 枚のチケットです。 ウィンドウ 3 はチケットを販売中です。 ウィンドウ 2 が販売中です チケットの販売 ウィンドウ 2 のチケット販売が完了しました。残り 12 枚のチケットがあります。 ウィンドウ 1 がチケットを販売中
プロセスは終了コード 0 で終了しました
同期とロックロックの違い:
Java の同期と Lock_インターネット カフェのブログに行くのを手伝ってください - CSDN blog_java のロックの同期とロック