zoukankan      html  css  js  c++  java
  • 多线程卖票代码

    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 {
    
       private static int ticket = 100;
    
       //private static Object obj = new Object();    //如果用引用数据类型成员变量当作锁对象,必须是静态的
    
       public void run() {
    
          while(true) {
    
             synchronized(Ticket.class) {
    
                if(ticket <= 0) {
    
                   break;
    
                }
    
                try {
    
                    Thread.sleep(10);           //线程1睡,线程2睡,线程3睡,线程4睡
    
                } catch (InterruptedException e) {
    
                    
    
                    e.printStackTrace();
    
                }
    
                System.out.println(getName() + "...这是第" + ticket-- + "号票");
    
             }
    
          }
    
       }
    
    }

    package com.loaderman.syn;
    
     
    
    public class Demo_Ticket {
    
     
    
       /**
    
        * @param args
    
        * 火车站卖票的例子用实现Runnable接口
    
        */
    
       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);           //多次启动一个线程是非法的
    
          t1.start();
    
          t1.start();
    
          t1.start();
    
          t1.start();*/
    
       }
    
     
    
    }
    
     
    
    class MyTicket implements Runnable {
    
       private int tickets = 100;
    
       @Override
    
       public void run() {
    
          while(true) {
    
             synchronized(this) {
    
                if(tickets <= 0) {
    
                    break;
    
                }
    
                try {
    
                    Thread.sleep(10);           //线程1睡,线程2睡,线程3睡,线程4睡
    
                } catch (InterruptedException e) {
    
                    
    
                    e.printStackTrace();
    
                }
    
                System.out.println(Thread.currentThread().getName() + "...这是第" + tickets-- + "号票");
    
             }
    
          }
    
       }
    
    }
    
  • 相关阅读:
    程序数据集算地数据库
    使用属性升级mybank
    第一个C#程序
    CSS3动画
    定位网页元素的解析
    CSS3中的浮动
    CSS中的盒子模型
    (十三)mybatis 整合 ehcache
    (十二)mybatis 查询缓存
    (十一)延迟加载
  • 原文地址:https://www.cnblogs.com/loaderman/p/6411178.html
Copyright © 2011-2022 走看看