多线程卖票代码

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-- + "号票");

         }

      }

   }

}
时间: 2024-10-10 09:30:20

多线程卖票代码的相关文章

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

老生常谈之多线程卖票问题

代码系本人逐字逐句编写所得,转载请注明出处,谢谢合作! 多线程售票的问题算是老生常谈了,笔者是Java初学者,曾为弄清楚这个问题在度娘里搜过好多篇关于这个问题的代码,发现正确的代码还是很有限.粘贴复制的现象很严重,而且大多数代码问题主要是在打印车票超过数量的问题上(部分会打印出负数票号),还有个别会出现表面看似打印结果正确,但其实程序中还有线程在等待执行(在Eclipse的控制台看到明显的"红点"一直在亮着).以下是笔者自己写的关于这个问题的代码,由于个人水平有限,难免有所疏漏,希望大

多线程—卖票

import threadingimport timelist_ticket=[] #定义票池lock=threading.Lock() #获得多线程锁num=30#票数for i in range(1,num+1): #ticket_num="0"*(len(str(num))-len(str(i)))+str(i) #001,003,013 ticket_num=str(i).zfill(3) list_ticket.append(ticket_num)# print(list_t

经典案例那个什么多线程--卖票..........................就是好像有点不对~~!先写下来.有大哥哥,大姐姐帮看下吗

package javawork; public class RunnableDemo2 { public static void main(String[] args) { Runnable02 ru = new Runnable02(); Thread ru1 = new Thread(ru); Thread ru2 = new Thread(ru);// 两个窗口 ru1.start();// 两个窗口启动 ru2.start(); } } class Runnable02 impleme

多线程系列1:经典卖票

1.卖票的方法 class TicketRest { int ticket = 1; int Max = 0; public TicketRest(int max) { Max = max; } /// <summary> /// 未加锁 /// </summary> /// <param name="num"></param> public void SellTicketNoLock(int num) { while (ticket &

java多线程实现卖票程序

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

多线程之多窗口卖票&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

多线程(多窗口卖票例子)

实现多线程的方式: 实现多线程的方式有多种,这里只列举两种常用的,而第一种继承Thread的方式无法实现多窗口卖票. 一,继承Thread方式: 特点:多线程多实例,无法实现资源的共享. 例子: 1 package com.demo.study.multithreading; 2 3 public class MyThread extends Thread{ 4 5 private int i = 10; 6 // 可以自行定义锁,也可以使用实例的锁 7 Object mutex = new O