java 多线程同步锁的使用 三个售票窗口同时出售20张票

Wesley13
• 阅读 564
package Thread;
/**
* 
* 三个售票窗口同时出售20张票
*程序分析:1.票数要使用同一个静态值
 *2.为保证不会出现卖出同一个票数,要java多线程同步锁。
*设计思路:1.创建一个站台类Station,继承Thread,重写run方法,
*在run方法里面执行售票操作!售票要使用同步锁:即有一个站台卖这张票时,其他站台要等这张票卖完!
*3.创建主方法调用类
*/
public class Station1 extends Thread{
//通过构造方法给线程名字赋值
public Station1(String name){
super(name);//给线程名字赋值
}
//为了保持票数的一致,票数要静态
static int tick = 20;
//创建一个静态钥匙
static Object ob = "aa";//值是任意的
//重写run方法 实现买票操作
public void run(){
while(tick>0){
synchronized(ob){
/**
* 这个很重要, 必须使用一个锁
* 进去的人会把钥匙拿在手上 出来才把钥匙拿出来
*/
if(tick>0){
System.out.println(getName()+"卖了第"+tick+"张票");
tick--;
}else{
System.out.println("票卖完了");
}
}
try {
sleep(1000);//休息一秒
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

 

package Thread;

public class MainClass1 {
/**
* java 多线程同步锁的使用
* 示例 三个售票窗口同时出售10张票
*/
public static void main(String[] args) {
//实例化站台对象 并为每一个站台取名字
Station1 station1 = new Station1("窗口1");
Station1 station2 = new Station1("窗口2");
Station1 station3 = new Station1("窗口3");
//让每一个站台对象各自开始工作
station1.start();
station2.start();
station3.start();
}
}
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
wanQQ wanQQ
2年前
Java学习 Day01 多线程
Java学习Day01多线程Java多线程实现方式有2种1.继承Thread类,重写run方法案例测试类Thread01Javapackagetop.wanqq.thread;/@authorwanqq/publicclassThread01extendsThread@Overridepubli
执键写春秋 执键写春秋
2年前
Java多线程同步示例(三个售票窗口同时出售20张票)
分析:1.票数要使用同一个静态值;2.为保证不会出现卖出同一个票数,要java多线程同步锁。3.有一个线程卖这张票时,其他线程要等这张票卖完!packageperson.xsc.practice;publicclassSaleWindowimplementsRunnableprivateintticket20;@Ov
浪人 浪人
3年前
一篇文章弄懂Java多线程基础和Java内存模型
文章目录一、多线程的生命周期及五种基本状态二、Java多线程的创建及启动1.继承Thread类,重写该类的run()方法2.通过实现Runnable接口创建线程类3.通过Callable和Future接口创建线程三、Java内存模型概念四、内存间的交互操作五、volatile和synchronized的
Wesley13 Wesley13
2年前
java多线程的常见例子
一.相关知识:Java多线程程序设计到的知识:(一)对同一个数量进行操作(二)对同一个对象进行操作(三)回调方法使用(四)线程同步,死锁问题(五)线程通信 等等二.示例一:三个售票窗口同时出售20张票;程序分析:1.票数要使用同一个静态值 2.为保证不会出现卖出同一个票数,要java多线程同步锁。设计思路:1.创建
Wesley13 Wesley13
2年前
java多线程模拟售票,多个窗口售票
packagecom.ma.thread001;/多线程模拟售票,多个窗口售票@authorma/publicclassSellTicktDemoimplementsRunnable{/需求:多线程模
Wesley13 Wesley13
2年前
java多线程(四)之同步机制
1.同步的前提  多个线程  多个线程使用的是同一个锁2.同步的好处  同步的出现解决了多线程的安全问题3.同步的弊端  当线程较多时,因为每个线程都会去判断同步上的锁,这样是很耗费资源的,会降低程序的运行效率.4.同步方法:  1.就是将同步关键字,synchronized加到方法上,此时的锁对象是this  
Wesley13 Wesley13
2年前
Java16周作业
题目1:编写一个应用程序,利用Java多线程机制,实现时间的同步输出显示。/\使用Runnable接口使用类创建线程对象,重写run()方法\\/代码publicclasstimetext{publicstaticvoidmain(Stringargs){Threa
Wesley13 Wesley13
2年前
Java创建多线程的几种方式
Java创建多线程的几种方式\TOC\1、继承Thread类,重写run()方法//方式1packagecn.itcats.thread.Test1;publicclassDemo1extendsThread{
Wesley13 Wesley13
2年前
Java创建多线程的几种方式
Java创建多线程的几种方式\TOC\1、继承Thread类,重写run()方法//方式1packagecn.itcats.thread.Test1;publicclassDemo1extendsThread{