十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今天就跟大家聊聊有关java中怎么利用多线程实现铁路售票系统,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联公司于2013年创立,是专业互联网技术服务公司,拥有项目网站设计、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元东昌做网站,已为上家服务,为东昌各地企业和个人服务,联系电话:18980820575
问题:铁路售票,一共100张,通过四个窗口卖完。
要求:分别用
继承Thread类 和 实现Runnable接口 去实现
①用继承Thread类去实现
package com.yy.syn; public class Demo3_Ticket { /** * 铁路售票,一共100张,通过四个窗口卖完 * 用继承Thread类去实现 * 分析: * 四个窗口就相当于四条线程,100张火车票就相当于成员变量 * * */ public static void main(String[] args) { new Ticket().start(); //创建对象,第一条线程 new Ticket().start(); //创建对象,第二条线程 new Ticket().start(); //创建对象,第三条线程 new Ticket().start(); //创建对象,第四条线程 } } class Ticket extends Thread{ //继承Thread类 private static int ticket = 100; //四条线程公用这100个成员变量 // private static Object obj = new Object(); //如果用引用数据类型的成员变量当作锁对象,必须是静态的,这里的obj对象应该设置为static静态类型 public void run(){ //重写run()方法 while(true){ synchronized (Ticket.class) { //这里应该变为synchronized(obj){} if(ticket <= 0){ break; } System.out.println(getName() + "...这是第" + ticket-- + "号票"); } } } }
②用实现Runnable接口去实现
package com.yy.syn; import java.security.GeneralSecurityException; public class Demo4_Ticket { /** * 铁路售票,一共100张,通过四个窗口卖完 * 用实现Runnable接口去实现 * 分析: * 四个窗口就相当于四条线程,100张火车票就相当于成员变量 * * */ public static void main(String[] args) { MyTicket mt = new MyTicket(); //这里只是创建了一次对象 new Thread(mt).start(); new Thread(mt).start(); new Thread(mt).start(); new Thread(mt).start(); /*Thread t1 = new Thread(mt); //public void start() 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。 t1.start(); t1.start(); t1.start(); t1.start();*/ } } class MyTicket implements Runnable{ //让MyTicket这个类去实现Runnable这个接口 private int tickets = 100; //然后,Myticket类里面定义成员变量,这里的票只有100张 @Override public void run() { while(true){ synchronized (Ticket.class) { //这里的锁对象也可以是this,即 synchronized (this),因为在主函数里面只创建了一次对象,这里的this就相当于主函数里面的mt if(tickets <= 0){ break; } try{ Thread.sleep(10); } catch(InterruptedException e){ e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "...这是第" + tickets-- + "号票" ); } //不是Thread的子类,不能直接调用getName,需要Thread.currentThread().getName() } } private String getName() { return null; } }
看完上述内容,你们对java中怎么利用多线程实现铁路售票系统有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。