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 }
时间: 2024-08-13 22:23:24

java火车站卖票程序(线程等待)的相关文章

Java多线程练习:ticket卖票程序

/*需求:简单的卖票程序多个窗口买票 */ class Ticket extends Thread{    private static int tick=100;    public void run()    {        while(true)        {            if(tick>0)            {                System.out.println(Thread.currentThread().getName()+"sale:--

java多线程实现卖票程序

本文采用java多线程实现了模拟车站多个车票卖票的功能. 关键词:java多线程 共享变量 实现runnable接口 volatile  线程同步. 代码如下 Ticket类 package ex7_TicketSaler; /*同一对象的多个线程thread0/1/2,对共享变量count的操作,需要将count的值声明为volatile * 并且因为多个线程操作的是同一个对象ticket,因此count是资源共享的 * */ public class Ticket implements Ru

Java多线程卖票例子

1 package com.test; 2 3 public class SaleTickets implements Runnable 4 { 5 private int ticketCount = 10;// 总的票数 6 Object mutex = new Object();// 锁 7 8 /** 9 * 卖票 10 */ 11 public void sellTicket() 12 { 13 synchronized (mutex)// 当操作的是共享数据时, 14 // 用同步代码

对于JAVA多线程卖票小程序的理解

昨天把多线程重新看了一遍,发现自己还是有许多需要理解的地方,现在写一篇总结. 一:利用继承Thread类会出现的问题: public class SellTicketsThread extends Thread { private int tickets = 10; public SellTicketsThread(String name) { super(name); } @Override public void run() { while (true) { if(tickets<=0) b

窗口卖票的线程解决方案

1 public class SellTicket implements Runnable { 2 // 定义100张票 3 private int tickets = 100; 4 //创建锁对象 5 private Object obj = new Object(); 6 7 @Override 8 public void run() { 9 while (true) { 10 synchronized (obj) { 11 if (tickets > 0) { 12 try { 13 Th

java:投个票程序

投票城市用到了:system.in, 正则pattern,matcher,排序接口comparable 复写compareTo排序方法 一个班级在选班长,按序号进行投票,并将票数最高的放在第一位显示 设计: student学生类 投票菜单类 投票操作类 接受输入数据类 主程序调用 public class Student implements Comparable{ private int id; private String name; private int vote; public Stu

多线程之多窗口卖票&amp;线程之间的通信

案例一:使用多线程完成三个窗口卖票(不能出现重复卖票以及负数票) 卖票程序SellTicket 这里使用Lock类中的方法实现加锁和释放锁! package cn.itcast.thread2; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SellTicket implements Runnable { private int ticke

Java---12---多线程练习:卖票---实现数据共享

做一个练习:卖票小程序,实现数据共享. 我们先来创建线程,和主线程交替运行. 这个就比较简单了: 就以继承Thread类的方式来说吧: class MyThread extends Thread { private int num = 150; private String name; public MyThread(String name) { super(name); } public void run () { while (num >= 0) { System.out.println(T

多线程卖票代码

package com.loaderman.syn; public class Demo_Ticket { /** * 需求:铁路售票,一共100张,通过四个窗口卖完. */ public static void main(String[] args) { new Ticket().start(); new Ticket().start(); new Ticket().start(); new Ticket().start(); } } class Ticket extends Thread {