/**
* 2018.9.5
* 作者:小孟鱼
* 功能:演示使用线程的注意事项
* 实例:模拟一个航空售系统:有3个售票点,在一天内卖出2000张票(注意不是买个售票点卖2000张,
* 而是一共卖出2000张票)
*/
package com.xianchen2;
public class Xianchen4 {
public static void main(String[] args) {
//定义3个售票窗口
TicketWindow tw1=new TicketWindow();
//TicketWindow tw2=new TicketWindow();
//TicketWindow tw3=new TicketWindow();
Thread t1=new Thread(tw1);
Thread t2=new Thread(tw1);
Thread t3=new Thread(tw1);
t1.start();
t2.start();
t3.start();
}
}
//创建一个售票窗口的类
class TicketWindow implements Runnable
{
//一个有2000张票
private int nums=2000;
public void run()
{
while(true)
{
//先判断是否还有票
//认为if else要保证其原子性{同步代码块}而这个This指的是对象锁
synchronized (this) {
if(nums>0)
{
//出票速度是1s出一张
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();//抛出异常
}
//显示信息
//Thread.currentThread().getName()这句话的意思是:当前线程的名字
System.out.println(Thread.currentThread().getName()+"正在售出第"+nums+"张票");
nums--;
}else
{
//已售完
break;
}
}
}
}
}