珠海网站制作推广公司,全国网站制作前十名,域名是建网站之前申请吗,云速成美站做网站好吗问题#xff1a;铁路售票#xff0c;一共100张#xff0c;通过四个窗口卖完。
要求#xff1a;分别用
继承Thread类 和 实现Runnable接口 去实现
①用继承Thread类去实现
package com.yy.syn;public class Demo3_Ticket {
/*** 铁路售票#xff0c;一共100张#xff…问题铁路售票一共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张Overridepublic void run() {while(true){synchronized (Ticket.class) { //这里的锁对象也可以是this即 synchronized (this)因为在主函数里面只创建了一次对象这里的this就相当于主函数里面的mtif(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;}}