java多线程之铁路售票系统
本文实例为大家分享了java多线程之铁路售票系统的具体代码,供大家参考,具体内容如下
问题:铁路售票,一共100张,通过四个窗口卖完。
要求:分别用
继承Thread类和实现Runnable接口去实现
①用继承Thread类去实现
packagecom.yy.syn; publicclassDemo3_Ticket{ /** *铁路售票,一共100张,通过四个窗口卖完 *用继承Thread类去实现 *分析: *四个窗口就相当于四条线程,100张火车票就相当于成员变量 * **/ publicstaticvoidmain(String[]args){ newTicket().start();//创建对象,第一条线程 newTicket().start();//创建对象,第二条线程 newTicket().start();//创建对象,第三条线程 newTicket().start();//创建对象,第四条线程 } } classTicketextendsThread{//继承Thread类 privatestaticintticket=100;//四条线程公用这100个成员变量 //privatestaticObjectobj=newObject();//如果用引用数据类型的成员变量当作锁对象,必须是静态的,这里的obj对象应该设置为static静态类型 publicvoidrun(){//重写run()方法 while(true){ synchronized(Ticket.class){//这里应该变为synchronized(obj){} if(ticket<=0){ break; } System.out.println(getName()+"...这是第"+ticket--+"号票"); } } } }
②用实现Runnable接口去实现
packagecom.yy.syn; importjava.security.GeneralSecurityException; publicclassDemo4_Ticket{ /** *铁路售票,一共100张,通过四个窗口卖完 *用实现Runnable接口去实现 *分析: *四个窗口就相当于四条线程,100张火车票就相当于成员变量 * **/ publicstaticvoidmain(String[]args){ MyTicketmt=newMyTicket();//这里只是创建了一次对象 newThread(mt).start(); newThread(mt).start(); newThread(mt).start(); newThread(mt).start(); /*Threadt1=newThread(mt); //publicvoidstart()使该线程开始执行;Java虚拟机调用该线程的run方法。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 t1.start(); t1.start(); t1.start(); t1.start();*/ } } classMyTicketimplementsRunnable{//让MyTicket这个类去实现Runnable这个接口 privateinttickets=100;//然后,Myticket类里面定义成员变量,这里的票只有100张 @Override publicvoidrun(){ while(true){ synchronized(Ticket.class){//这里的锁对象也可以是this,即synchronized(this),因为在主函数里面只创建了一次对象,这里的this就相当于主函数里面的mt if(tickets<=0){ break; } try{ Thread.sleep(10); }catch(InterruptedExceptione){ e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"...这是第"+tickets--+"号票"); }//不是Thread的子类,不能直接调用getName,需要Thread.currentThread().getName() } } privateStringgetName(){ returnnull; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。