Java模拟多线程实现抢票代码实例
这篇文章主要介绍了Java模拟多线程实现抢票,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
实现100张票抢购的demo
这里需要一个变量,来保存100张
局部变量:
- 定义在方法内,方法运行存在,方法运行结束销毁,无法保存一个持久化数据!!!
成员变量:
- 保存在类对象内,创建对象之后存在,对象不销毁成员变量也不会被内存收回。因为
- 在每一个类对象中,都存在一个对应的成员变量,这些成员变量不是同一个数据。不是
- 共享资源,不合适!!!
静态成员变量:
- 保存在内存的【数据区】,类文件加载时就存在,并且可以给每一个类对象使用,一处修改
- 处处受影响!!!作为共享资源非常合适!!!
问题
1. 销售顺序存在异常
2. 存在某一张票被销售了多次
使用锁
代码如下
class SaleThread implements Runnable { /** * 使用静态成员变量作为100张票的保存变量,是一个共享资源。 */ private static int tickets = 100; @Override public void run() { // 完成售票过程 while (true) { /* 字符串可以作为锁对象,因为双引号包含的字符串不管在代码中如何运行,有且只有一个 */ synchronized ("锁") { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if (tickets > 0) { System.out.println(Thread.currentThread().getName() + "售出了" + tickets + "张票"); tickets--; } else { System.out.println(Thread.currentThread().getName() + "售罄!!!"); break; } } } } } public class Demo { public static void main(String[] args) { Thread t1 = new Thread(new SaleThread(), "售票人员1"); Thread t2 = new Thread(new SaleThread(), "售票人员2"); Thread t3 = new Thread(new SaleThread(), "售票人员3"); t1.start(); t2.start(); t3.start(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
栏 目:Java
下一篇:Java服务器端跨域问题解决方案
本文标题:Java模拟多线程实现抢票代码实例
本文地址:https://www.xiuzhanwang.com/a1/Java/8731.html
您可能感兴趣的文章
- 01-10Java实现动态模拟时钟
- 01-10利用Java实现复制Excel工作表功能
- 01-10JavaWeb实现邮件发送功能
- 01-10java基于poi导出excel透视表代码实例
- 01-10Java实现动态数字时钟
- 01-10基于Java验证jwt token代码实例
- 01-10java实现液晶数字字体显示当前时间
- 01-10浅谈Java中真的只有值传递么
- 01-10Java动态显示当前日期和时间
- 01-10如何解决线程太多导致java socket连接池出现的问题
阅读排行
本栏相关
- 01-10Java实现动态模拟时钟
- 01-10Springboot中@Value的使用详解
- 01-10JavaWeb实现邮件发送功能
- 01-10利用Java实现复制Excel工作表功能
- 01-10Java实现动态数字时钟
- 01-10java基于poi导出excel透视表代码实例
- 01-10java实现液晶数字字体显示当前时间
- 01-10基于Java验证jwt token代码实例
- 01-10Java动态显示当前日期和时间
- 01-10浅谈Java中真的只有值传递么
随机阅读
- 01-10SublimeText编译C开发环境设置
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10C#中split用法实例总结
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 04-02jquery与jsp,用jquery
- 01-11ajax实现页面的局部加载
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10delphi制作wav文件的方法
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10使用C语言求解扑克牌的顺子及n个骰子