案例说明:3个窗口同时去卖100张票
实现:需要定义一个卖票的线程,然后在主方法中同时开启3个线程
解决方案:定义一个公共的锁对象,只有得到锁对象才能卖票,执行完毕后释放锁对象
卖票的线程
public class PayTicket implements Runnable{
//定义一个访问的公共资源
private int ticket = 100;
Object obj = new Object();//创建锁对象必须写在run外面
@Override
public void run() {
while (true){
synchronized (obj){
if (ticket>0){
System.out.println("卖出了第"+ticket+"张票");
ticket--;
}
}
}
}
}
测试方法
public class PayTicketTest {
public static void main(String[] args) {
PayTicket mt = new PayTicket();//设置线程任务是卖票
//同时开启了三个卖票的线程
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
}
}