温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用Java模拟多线程实现抢票代码

发布时间:2021-11-05 16:21:09 来源:亿速云 阅读:382 作者:iii 栏目:编程语言

这篇文章主要介绍“怎么用Java模拟多线程实现抢票代码”,在日常操作中,相信很多人在怎么用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模拟多线程实现抢票代码”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI