java多线程实现卖票小程序

 1 package shb.java.demo;
 2 /**
 3  * 多线程测试卖票小程序。
 4  * @Package:shb.java.demo
 5  * @Description:
 6  * @author shaobn
 7  * @Date 2015-9-2下午7:49:53
 8  */
 9 public class TestSyn {
10     public static void main(String[] args) {
11         //此注释为实现方式一
12         /*TicketDemo td = new TicketDemo();
13         Thread t1 = new Thread(td);
14         Thread t2 = new Thread(td);
15         t1.start();
16         t2.start();*/
17         //为实现方式二
18         TicketDemo2 td2 = new TicketDemo2();
19         Thread t3 = new Thread(td2);
20         Thread t4 = new Thread(td2);
21         t3.start();
22         t4.start();
23     }
24 }
25 /**
26  * 卖票的类(实现方式一)
27  * @Package:shb.java.demo
28  * @Description:
29  * @author shaobn
30  * @Date 2015-9-2下午7:44:45
31  */
32 class TicketDemo implements Runnable{
33     private int ticket = 200;
34     public void run(){
35         while(true){
36             synchronized(this){
37             if(ticket>0){
38                 try {
39                     Thread.sleep(100);
40                 } catch (Exception e) {
41                     // TODO: handle exception
42                     e.printStackTrace();
43                 }
44                 System.out.println(Thread.currentThread()+"***"+"票数为"+ticket--);
45             }
46             }
47         }
48     }
49
50 }
51 /**
52  * 卖票的类(实现方式二)
53  * @Package:shb.java.demo
54  * @Description:
55  * @author Shihaobin
56  * @Date 2015-9-2下午7:51:56
57  */
58 class TicketDemo2 implements Runnable{
59     public int ticket = 200;
60     public void run(){
61         while(true){
62             show();
63         }
64     }
65     //实现对多线程程序的封装
66     public synchronized void show(){
67         if(ticket>0){
68             try {
69                 Thread.sleep(100);
70             } catch (Exception e) {
71                 // TODO: handle exception
72                 e.printStackTrace();
73             }
74             System.out.println(Thread.currentThread()+"***"+"票数为"+ticket--);
75         }
76
77     }
78 }利用多线程实现的简单模拟卖票。
时间: 2024-08-24 01:41:54

java多线程实现卖票小程序的相关文章

java多线程实现卖票程序

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

java 多线程之卖票两种方式

1.通过extends Thread 1 /* 2 需求:简单的卖票,多个窗口同时买票 3 (共用资源) 4 创建线程的第二种方式:实现Runnable接口 5 6 步骤: 7 1,定义类实现Runnable接口 8 2,覆盖/重写Runnable接口中的run方法 9 将将线程要运行的代码存放在该run方法中 10 3,通过Thread类建立线程对象 11 4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数 12 为什么要将Runnable接口的子类对象传递给Thr

卖票小程序(二):解决Thread线程安全隐患!

第二篇文章内容 class Ticket implements Runnable//extends Thread//实现Runnable接口 { public int tic = 100; Object obj = new Object(); public void run() { while(true)//默认为真 { synchronized(obj)//同步代码块 { if(tic>0) {//如果票数大于0则执行如下代码. try {Thread.sleep(10);} catch (E

对于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多窗口卖票问题详解

Java多窗口卖票问题详解 Java 在练习Java多线程的过程中,通常都会通过多窗口卖票这个问题来详细逐渐解析多线程的线程同步,其中涉及到同步代码块,同步方法和互斥锁. 铁道部发布了一个售票任务,销售1000张票,要求有10个窗口来进行销售,请编写多线程程序来模拟这个效果. 第一步 class Test4Thread extends Thread { private static int tickets = 1000; @Override public void run() { while (

抢票小程序

抢票小程序 我们可以利用所学的内容来写一个简易的抢票小程序 from multiprocessing import Process import json,time,os def search(): time.sleep(1) # 模拟网络io with open('db.txt',mode='rt',encoding='utf-8') as f: res = json.load(f) print(f'还剩{res["count"]}') def get(): with open('d

Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战

Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战 说明:Java生鲜电商平台-小程序或者APP优惠券的设计与源码实战,优惠券是一种常见的促销方式,在规定的周期内购买对应商品类型和额度的商品时,结算时满足一定条件会减免一定金额.通过发放优惠券,引导用户购买相应的商品,在下单的时候抵扣一定的费用,达到促销.提高客单价的目标. 优惠券不论在线上还是线下,适用范围都比较广泛.例如滴滴发的专车券.外卖平台发的外卖券.京东淘宝的优惠券等. 1.优惠券的类型和应用场景 优惠券有多种分类方式,按照使

Java之多线程窗口卖票问题(Thread)

/** * * 例子:创建三个窗口卖票,总票数为100张.使用继承Thread类的方式 * * 存在线程的安全问题,待解决. * */class Window extends Thread{ private static int ticket = 100; @Override public void run() { while(true){ if(ticket > 0){ System.out.println(getName() + ":卖票,票号为:" + ticket); t

Java之多线程窗口卖票问题(Runnable)

/** * 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * 存在线程的安全问题,待解决. */class Window1 implements Runnable{ private int ticket = 100; @Override public void run() { while(true){ if(ticket > 0){ System.out.println(Thread.currentThread().getName() + ":卖票,票号为: