线程示例:多线程卖票

来源:互联网 发布:paxos算法 实现 编辑:程序博客网 时间:2024/05/17 01:39

第一种创建线程方式

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)

1 0
原创粉丝点击