java多线程之铁路售票系统

本文实例为大家分享了java多线程之铁路售票系统的具体代码,供大家参考,具体内容如下

问题:铁路售票,一共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多线程之铁路售票系统 的全部内容, 来源链接: utcz.com/z/340154.html

回到顶部