java火车站卖票程序(线程等待)

来源:互联网 发布:seo原创文章代写 编辑:程序博客网 时间:2024/04/29 13:05
package com.java.thread.synch;/** * 卖票演示 * @author Administrator * 两个车站卖100张票 */public class SellTicket {static Object obj=new Object();static int Count=100;public static void main(String[] args){//StationOne one =new StationOne(obj);//StationTwo two =new StationTwo(obj);//Thread th1=new Thread(one);//Thread th2=new Thread(two);//th1.start();//th2.start();Thread th1=new Thread(new A());Thread th2=new Thread(new A());th1.setName("车站一");th2.setName("车站二");th1.start();th2.start();}}class A implements Runnable{//String obj=new String("aa");@SuppressWarnings("static-access")public void run(){String obj="aaa";//不能是String obj=new String("aa");aa存放在堆区//有两个obj,但是它们都是指向同一个aaa,aaa存放在数据区 ,数据区只有一份拷贝while(true){synchronized (obj) {if(SellTicket.Count>0){try {Thread.currentThread().sleep(30);} catch (InterruptedException e) {//TODO Auto-generated catch blocke.printStackTrace();}//System.out.printf("%s卖出了第%d张票\n",Thread.currentThread().getName(),SellTicket.Count);System.out.println(Thread.currentThread().getName()+SellTicket.Count);SellTicket.Count--;}else{break;}}}}}/** * 车站一 * @author Administrator * */class StationOne implements Runnable{private Object obj;public StationOne(Object obj){this.obj=obj;}@SuppressWarnings("static-access")public void run() {synchronized(obj){while(SellTicket.Count>0){obj.notify();try {Thread.currentThread().sleep(60);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.printf("\t\t\t\t车站一卖出了第%d张票\n",SellTicket.Count);SellTicket.Count--;try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}}obj.notify();}}}/** * 车站二 * @author Administrator * */class StationTwo implements Runnable{private Object obj;public StationTwo(Object obj){this.obj=obj;}@SuppressWarnings("static-access")public void run() {synchronized(obj){while(SellTicket.Count>0){obj.notify();try {Thread.currentThread().sleep(60);} catch (InterruptedException e1) {e1.printStackTrace();}System.out.printf("车站二卖出了第%d张票\n",SellTicket.Count);SellTicket.Count--;try {obj.wait();} catch (InterruptedException e) {e.printStackTrace();}}obj.notify();}}}

0 0