编程模拟售票系统,模拟多个窗口(至少4个)同时出售100张车票的情况;用实现Runnable接口的方法实现多线程。
public class SellTicket implements Runnable{
private int ticket = 100;
@Override
public void run(){
sell();
}
public void sell(){
while(true){
synchronized (this){//this表示当前对象
if(ticket > 0){
try {
Thread.sleep(300);//模拟卖票需要一定的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
ticket--;
System.out.println(Thread.currentThread().getName()+"售票,剩余"+ticket+"张票!");
}
}
}
}
public static void main(String[] args) {
SellTicket sell = new SellTicket();
Thread win1 = new Thread(sell);
Thread win2 = new Thread(sell);
Thread win3 = new Thread(sell);
Thread win4 = new Thread(sell);
Thread win5 = new Thread(sell);
win1.setName("win1售出");
win2.setName("win2售出");
win3.setName("win3售出");
win4.setName("win4售出");
win5.setName("win5售出");
win1.start();
win2.start();
win3.start();
win4.start();
win5.start();
}
}
要想实现多个窗口(进程)都参与,重点是使用 同步代码块。
synchronized(同步监视器){
//需要被同步的代码块(即为操作共享数据的代码)
}
具体其他方法参考大神Java 多线程同步-模拟窗口售票我这只是一种方法,看了大神的解析受益匪浅。