首页 > 代码库 > java火车站卖票程序(线程等待)
java火车站卖票程序(线程等待)
1 package com.java.thread.synch; 2 3 /** 4 * 卖票演示 5 * @author Administrator 6 * 两个车站卖100张票 7 */ 8 public class SellTicket { 9 static Object obj=new Object(); 10 static int Count=100; 11 public static void main(String[] args){ 12 // StationOne one =new StationOne(obj); 13 // StationTwo two =new StationTwo(obj); 14 // Thread th1=new Thread(one); 15 // Thread th2=new Thread(two); 16 // th1.start(); 17 // th2.start(); 18 19 Thread th1=new Thread(new A()); 20 Thread th2=new Thread(new A()); 21 th1.setName("车站一"); 22 th2.setName("车站二"); 23 th1.start(); 24 th2.start(); 25 } 26 } 27 28 class A implements Runnable{ 29 // String obj=new String("aa"); 30 @SuppressWarnings("static-access") 31 public void run(){ 32 String obj="aaa";//不能是String obj=new String("aa");aa存放在堆区 33 // 有两个obj,但是它们都是指向同一个aaa,aaa存放在数据区 ,数据区只有一份拷贝 34 while(true){ 35 synchronized (obj) { 36 if(SellTicket.Count>0){ 37 try { 38 Thread.currentThread().sleep(30); 39 } catch (InterruptedException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 // System.out.printf("%s卖出了第%d张票\n",Thread.currentThread().getName(),SellTicket.Count); 44 System.out.println(Thread.currentThread().getName()+SellTicket.Count); 45 SellTicket.Count--; 46 }else{ 47 break; 48 } 49 } 50 51 } 52 } 53 } 54 55 56 /** 57 * 车站一 58 * @author Administrator 59 * 60 */ 61 class StationOne implements Runnable{ 62 private Object obj; 63 public StationOne(Object obj){ 64 this.obj=obj; 65 } 66 @SuppressWarnings("static-access") 67 public void run() { 68 synchronized(obj){ 69 while(SellTicket.Count>0){ 70 obj.notify(); 71 try { 72 Thread.currentThread().sleep(60); 73 } catch (InterruptedException e1) { 74 e1.printStackTrace(); 75 } 76 System.out.printf("\t\t\t\t车站一卖出了第%d张票\n",SellTicket.Count); 77 SellTicket.Count--; 78 try { 79 obj.wait(); 80 } catch (InterruptedException e) { 81 e.printStackTrace(); 82 } 83 } 84 obj.notify(); 85 } 86 } 87 } 88 89 /** 90 * 车站二 91 * @author Administrator 92 * 93 */ 94 class StationTwo implements Runnable{ 95 private Object obj; 96 public StationTwo(Object obj){ 97 this.obj=obj; 98 } 99 @SuppressWarnings("static-access")100 public void run() {101 synchronized(obj){102 while(SellTicket.Count>0){103 obj.notify();104 try {105 Thread.currentThread().sleep(60);106 } catch (InterruptedException e1) {107 e1.printStackTrace();108 }109 System.out.printf("车站二卖出了第%d张票\n",SellTicket.Count);110 SellTicket.Count--;111 try {112 obj.wait();113 } catch (InterruptedException e) {114 e.printStackTrace();115 }116 }117 obj.notify();118 }119 }120 }
java火车站卖票程序(线程等待)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。