多线程实现多窗口售票
多线程实现售票
- 核心是共享资源的线程安全,因为如果不限制对共享数据的访问,就会导致出现卖同一张票,卖多票的情况。
- 票数是共享资源,所以对票数进行访问和修改需要进行同步(排队)。
- 在对票数进行修改的函数上使用synchronized关键字形成同步方法(默认是该类的对象锁)。
- 这样每次代码运行到该处都会去锁池查看该对象锁是否空闲,空闲就获取锁并进入函数,如果已经有其他线程获取了该锁,就排队等待,等到获得锁的线程运行完毕释放锁才可以进行抢夺。(不过如果没有进行线程休眠,大概率会某一个线程刚释放锁,然后又抢到了锁。)
实现代码:
package thread;
public class ThreadTest implements Runnable {int i = 100;//共享资源public ThreadTest() {this.i=100;}public ThreadTest(int i) {//构造函数this.i = i;}public void run() {while (sale()) {//调用sale方法,同时sale返回值作为循环判断条件try {Thread.sleep(10);/** 这个睡眠是出现效果的关键,因为cpu的抢夺很快,* 所以每次线程释放锁的时候都让他休眠一下,* 这样其他线程就会立刻抢夺时间片,* 这样多窗口售票效果更明显,* 哪怕休眠一毫秒效果也很明显*/} catch (InterruptedException e) {e.printStackTrace();}}}public synchronized boolean sale() {//ThreadTest对象锁if (i > 0) {System.out.println(Thread.currentThread().getName() + "卖出了第" + i + "张票!");i--;return true;} else {return false;}}
}
测试类:
package thread;
public class ThreadMain {public static void main(String[] args) {ThreadTest w=new ThreadTest(10);Thread t1=new Thread(w);Thread t2=new Thread(w);Thread t3=new Thread(w);t1.setName("t1");t2.setName("t2");t3.setName("t3");t1.start();t2.start();t3.start();}
}
效果:
多线程实现多窗口售票相关推荐
- Day18:多线程-火车站多窗口售票案例
一.进程与线程 进程的特征: 每一个进程的内部数据和状态都是完全独立的: 创建并执行一个进程的系统开销是比较大的: 进程是程序的一次执行过程,是系统运行程序的基本单位. 线程的特征: 在Java中,程 ...
- 多窗口售票:单件模式多线程实现
多窗口售票:单件模式多线程实现 2017-06-01 场景如下:总共100张票,编号1~100,三个窗口售票,售完为止. Tickets.java 票为单件模式,代码如下: package Teste ...
- Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票
package com.ma.thread001; /** * 多线程模拟售票,多个窗口售票 * @author ma * */ public class SellTicktDemo implemen ...
- pyqt5多进程 python_PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
每点击一次按钮,弹出一个对话框(子窗口),同时开启一个子线程来执行任务并更新对话框内容,关闭对话框则关闭对应子线程 1. 建立一个简单的主界面和一个自定义对话框 from PyQt5 import Q ...
- 模拟火车站售票窗口,开启三个窗口售票,总票数为100张
方法一:继承Thread class Window extends Thread{static int ticket = 100;public void run(){while (true) {if ...
- 【多线程与AfxGetMainWnd 窗口 与 线程 有必然联系吗? 命名空间】
[多线程与AfxGetMainWnd & 窗口 与 线程 有必然联系吗? & 命名空间] 笔记内容: 转载自:http://blog.csdn.net/linyaoxin/artic ...
- java多线程同步 多窗口卖票实例_java多线程之火车售票系统模拟实例
1.前言 为了学习多线程共享与通信,我们模拟一个火车售票系统,假设有10张火车票,三个窗口(也就是三个线程)同时进行售票. 2.非同步代码 package com.tl.skyLine.thread; ...
- Java多线程 模拟售票窗口售票
编写一个Java 多线程程序,完成三个售票窗口同时出售20张票 程序分析: 1.票数要使用同一个静态值: 2.为保证不会出现卖出同一个票数,要java多线程同步锁. 设计思路: 创建一个站台类Stat ...
- 多线程的创建和使用,多线程案例:火车站售票
多线程 1.并发与并行 *并行:指两个或多个事件在同一时刻发生(同时发生). *并发:指两个或多个事件在同一个时间段内发生. 2.线程和进程 *进程:是指一个内存中运行的应用程序,每个进程都有一个独立 ...
- 多线程:模仿火车站售票
多线程:是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率.线程是在同一时间需要完成多项任务的时候实现的. 但是多线程有几个问题:要有被多个线程所共享的数据 多个线 ...
最新文章
- nacos集群之日志狂刷fail to connect server,after trying 567 times,last try server is...
- 圆柱体积怎么算立方公式_【六年级数学微课】巧算圆锥的体积
- boost::includes相关的测试程序
- Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析
- 怎么批量选择目标_全日制专升本一次可以报几个学校?目标院校应该怎么选择?...
- 用Java写有关早上的语录,实用的适合早上发的早安问候语语录汇编39句
- 设计实现优雅修改redux数据流的一个库 - redux-chef
- 【Divided Two】cpp
- JAVA 相关书籍推荐(全)
- 啊哈C语言第五章 第 八 节
- stdafx.h到底有什么用
- Zmodem协议工作原理
- UML(统一建模语言)
- 基于Nonebot2搭建QQ机器人(二):插件使用
- 1.【Windows图标点击无反应修复
- Android高仿微信头像裁剪
- 数据库中索引的填充因子
- C语言-XLSX基础数据解析(需借助libxml2库)
- KVM虚拟化,超详细
- macOS配置vim