模拟电影院的买票过程演示线程安全问题
代码如下:
package demo2;public class ThreadTest {public static void main(String[] args) {Runnable runnable=new Runnable() {private int ticket=100;//电影票数@Overridepublic void run() {while(true){if(ticket>0){try {Thread.sleep(10);//执行卖票操作花费的时间} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket--+"张票");}}}};Thread thread0=new Thread(runnable);Thread thread1=new Thread(runnable);Thread thread2=new Thread(runnable);thread0.start();thread1.start();;thread2.start();}
}
最后一部分输出如下:
Thread-0正在卖第7张票
Thread-1正在卖第6张票
Thread-2正在卖第5张票
Thread-0正在卖第4张票
Thread-1正在卖第3张票
Thread-2正在卖第2张票
Thread-0正在卖第1张票
Thread-1正在卖第0张票
Thread-2正在卖第-1张票
可见线程不安全~
同步代码块解决线程安全,代码如下:
package demo2;public class ThreadTest {public static void main(String[] args) {Runnable runnable=new Runnable() {private int ticket=10000;//电影票数private Object object=new Object();@Overridepublic void run() {while(true){synchronized (object){if(ticket>0){try {Thread.sleep(10);//执行卖票操作花费的时间} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket--+"张票");}}}}};Thread thread0=new Thread(runnable);Thread thread1=new Thread(runnable);Thread thread2=new Thread(runnable);thread0.start();thread1.start();;thread2.start();}
}
模拟电影院的买票过程演示线程安全问题相关推荐
- Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子
模拟12306买票过程 共享资源,并发(线程安全) Web12306.java /*** 共享资源,并发(线程安全)* @author Administrator**/ public class We ...
- 程序模拟电影院窗口卖票,多线程Demo
某电影院目前正在上映国产大片,共有100张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票 卖电影票Demo 实现步骤 1.SellTicket类 2.SellTicketDemo测试类 3.测 ...
- Java线程同步-模拟买票
文章首发于 2020-11-29 知乎文章:Java线程同步-模拟买票 作者:落雨湿红尘(也是我o) 01 导语 本文使用JAVA代码模拟买票场景下的业务交互,通过示例讲解线程的初始化.线程同步等ja ...
- java模拟多线程买票问题
多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式 ...
- 【swjtu】数据结构实验3_基于循环队列的排队买票模拟程序
实验内容及要求: 编程建立循环队列存储结构,对排队买票过程进行模拟.要求程序在控制台屏幕上显示字符菜单: 1. 排队--输入新到达的买票人姓名,加入买票队列中: 2. 售票--排队队列中最前面的人购票 ...
- 多线程(并发)买票的案例详解同步代码块和同步方法 (复习)
文章目录 前言 简单的原理: 队列+锁 常见的买票案例(线程安全:多个线程操作同一个数据.) 结果: 使用同步代码块或者同步方法(解决线程不安全的问题) 添加的方式一:synchronized 关键字 ...
- 【转】女孩蓉蓉买票回家的曲折经历(多图)
虽然春节马上就要过去了,偶然间看到这么一篇文章,特意转载一哈,可以当做一个故事来看. 今年就要大学毕业了,我到北京来实习,快过年了,我想家里的大白猫了. 我想家乡的热干面了,北京吃不到正宗的. ...
- 使用同步机制解决线程安全问题
线程的生命周期: 什么情况会产生线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,即产生线程安全问题.读的操作不会发生线程安全问题. 例子:上文中的卖票 ...
- 解决线程安全问题的两种办法
package com.xt.java;/*** 创建3个窗口卖票,总票数为100张 使用实现Runnable接口的方式* 问题一:买票过程中,出现了重票.错票-->出现了线程安全问题* 问题出 ...
最新文章
- linear-gradient 百分比以及斜角的使用
- python 字典的一些简单操作
- 基于python、虹软实现人脸检测,人脸识别
- ios 横向滚轮效果_ios横向菜单+页面滑动
- WebLogic11g-常用运维操作
- 4qam、16qam、64qam、256qam理论仿真曲线
- 【C++ Priemr | 15】派生类向基类转换的可访问性
- CarbonData:大数据融合数仓新一代引擎
- 只用一个WiFi,渗透进企业全部内网
- html特殊符号sm,以前搜集的一些资料—html中的特殊字符(2)
- js中判断数组中是否含有某个字符串方法
- lambda表达式学习使用实例
- centos7修改mysql默认端口号_修改mysql默认端口方法(linux centos 7)
- The Book of Qt4 : The Art of Building Qt Application 阅读笔记
- python rgb565_RGB565的转换
- Win10 系统C盘 容量变大,如何清理,亲测有效
- jp.ne.so_net.ga2.no_ji.jcom.JComException: createInstance() failed HRESULT=0x800401F3L
- oracle11g认证,ORACLE11g-OCP认证(甲骨文专家级数据库工程师)
- 计科实训 餐馆点菜系统
- P2132 小Z的队伍排列-杨氏矩阵与hook定理
热门文章
- 步科ET070不能启动
- 「硬见小百科」深入剖析电感电流
- 杭州电子科技大学保研计算机,杭州电子科技大学计算机学院计算机技术(专业学位)保研细则...
- 从Big Dog到Spot Mini:波士顿动力「四足机器人」进化史概览
- 辅助驾驶功能开发-执行器篇(02)-横向辅助功能(行车)对电动助力转向系统需求
- DDOS高防IP的用途
- 十步杀一人,千里不留行
- Linux部署tomcat项目的方法,使用linux部署tomcat项目
- 怎样制作一个二维MG动画
- 【Python】中秋节快到了,这才是程序员该赏的“月亮”(3D+音频+源码)