火车售票
假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。(如下图所示)
源代码
package 火车售票;
public class sop {
public static void main(String[] args) {
for(int i=0;i<10;i++){//启动十次线程
Sell t = new Sell(i);
t.start();
}
}
private static int k=0;//售出票数
private static int Z=100;//总票数
private static synchronized boolean sell(int n){
if(k<Z){
System.out.println("第"+n+"售票点卖出了第"+Z+"张票");
Z--;
return true;
}
return false;
}
static class Sell extends Thread{//售票点
int n;//售票点编号
public Sell(int n){
this.n=n;
}
public void run(){
while(sell(n)){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
执行结果如下