题目 : 设计多线程程序:设计火车票模拟程序,假设火车站有100张票,6个售票窗口同时售票,用6个线程模拟6个窗口售票情况。要求打印:窗口 n (窗口编号 1~6 )出售车票编号 m( 1 ~ 100 )成功。
代码:
package train20181010;
import java.util.Random;
public class Ticket implements Runnable {
static int num;//火车票数
Ticket(){
num = 100;//共有100张票
}
@Override
public void run() {
// TODO Auto-generated method stub
//同步代码块
while(num > 0){
synchronized(this){
if(num > 0){//双重校验
try {
Thread.sleep(new Random().nextInt(20));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("窗口"+Thread.currentThread().getName()+"出售车票编号"+num+"成功~");
num--;
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Ticket ticket = new Ticket();
for(int line = 1;line <= 6;line++){
new Thread(ticket,""+line).start();
}
}
}
结果: