public class Demo10_5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义三个售票窗口
TicketWindow tw=new TicketWindow();
//使用三个线程同时启动
Thread t1=new Thread(tw);
Thread t2=new Thread(tw);
Thread t3=new Thread(tw);
t1.start();
t2.start();
t3.start();
}
}
class TicketWindow implements Runnable{
//一共两千张票
private int nums=2000;
private Dog myDog=new Dog();
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
//认为if else 要保证其原子性
synchronized (myDog)
{
//判断是否还有票
if(nums>0){
//显示售票信息
//Thread.currentThread().getName()当前线程的名字
System.out.println(Thread.currentThread().getName()+"正在售出第"+nums+"票");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
nums--;
}else {
//售票结束
break;
}
}
}
}
}
class Dog{
}
非常抱歉,没能及时更新这个问题的答案。
后面我自己解决了这个问题。
我干了这么一件事情。
我初始化了一个窗口,安排了2000张卖票,然后安排三个工作人员卖票(三个线程)一起卖票(同时访问我设置的2000张票)。
其实这个我想问的是,为什么不能按照t1线程先卖,t2线程后卖,t3再买。
后面我想了,应该是操作系统的问题,线程的优先级不同。应该是不能按照顺序去卖这个票。
就和我们去买票的时候是一样的,随机的三个卖票的,是随机的,而不能按照顺序。
如果非要按照顺序的话,那么用一个线程就够了,何必要用多线程。
结论就是,完全锁住了,没有出现三个线程同时卖一张票的情况。
结果截图:
