线程示例:多线程卖票

第一种创建线程方式

class SellWindow  extends Thread 
{
    private String window;//窗口号,即线程编号
    private static int count = 100;//假设有100张票,必须设置成静态,否则每个线程都拥有100张票
    SellWindow(String window)
    {
        super(window);
    }
    public void run()
    {
        sell();
    }
     void sell()
    {
    while (count > 0)
    {
        System.out.println(type + Thread.currentThread().getName()
            + "   号窗口卖出\"" + this.type + (100 - count) + "\"号票  剩余:"
            + --count);
    }
    }
}
class SellTicket
{
    public static void main(String[] args) 
    {
        //创建四个线程并分别启动
        SellWindow sw1 = new SellWindow("001");
        SellWindow sw2 = new SellWindow("002");
        SellWindow sw3 = new SellWindow("003");
        SellWindow sw4 = new SellWindow("004");
        sw1.start();
        sw2.start();
        sw3.start();
        sw4.start();
    }
}

方式二:此法更可取

  • 这样把线程任务封装在run()中,单独用Threadc创建四个进程,但是每次传入的参数都是SellWindow对象的,
    这样保证票数count属于一个任务对象,不会造成独立使用count现象
    当票种多样时,方法一就不行了
class SellWindow implements Runnable
{
    private String type = "不限";
    private int count = 100;

    SellWindow()
    {
    }

    SellWindow(String type)
    {
    this.type = type;
    }

    public void run()
    {
    sell();
    }

    void sell()
    {
    while (count > 0)
    {
        System.out.println(type + Thread.currentThread().getName()
            + "   号窗口卖出\"" + this.type + (100 - count) + "\"号票  剩余:"
            + --count);
    }
    }
}

class SellTicket
{
    public static void main(String[] args)
    {
    // 创建一个线程任务对象
    /*
     * SellWindow sw1 = new SellWindow( ); Thread t1 = new Thread(sw1);
     * Thread t2 = new Thread(sw1); Thread t3 = new Thread(sw1); Thread t4 =
     * new Thread(sw1); t1.start(); t2.start(); t3.start(); t4.start();
     */

    // 创建两个线程任务,一个卖高铁票,一个动车票
    SellWindow swG = new SellWindow("高铁票");
    SellWindow swD = new SellWindow("动车票");
    // 创建四个线程,分别分种类传入
    Thread tg1 = new Thread(swG, "001");
    Thread tg2 = new Thread(swG, "002");
    Thread td1 = new Thread(swD, "003");
    Thread td2 = new Thread(swD, "004");
    tg1.start();
    tg2.start();
    td1.start();
    td2.start();

    }
}

结果:

高铁票001 号窗口卖出”高铁票0”号票 剩余:99
动车票004 号窗口卖出”动车票1”号票 剩余:98
高铁票002 号窗口卖出”高铁票1”号票 剩余:98
动车票003 号窗口卖出”动车票0”号票 剩余:99
高铁票002 号窗口卖出”高铁票3”号票 剩余:96
动车票004 号窗口卖出”动车票2”号票 剩余:97
高铁票001 号窗口卖出”高铁票2”号票 剩余:97
高铁票001 号窗口卖出”高铁票5”号票 剩余:94
……

(打印不是按照顺序是因为还有其他线程在占用CPU)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值