java实现qq抢红包_Java实现抢红包功用

用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里,然后用Job守时将红包信息推送给玩家。每一批玩家的抢红包恳求,其实操作的都是从行列中弹出的第一个红包元素,但当时的红包数量为空的时分,主动弹出下一个红包(如果有的话)。

关键思维:

1.抢红包涉及多人并发操作,需求做好同步保证多线程运行结果正确。

2.因为一起在线人数大,从功能方面考虑,玩家的发红包恳求不必及时响应,而由服务端守时履行发红包行列。

下面是主要的代码和完成逻辑阐明

1.创建一个类,表示红包这个实体概念。直接选用原子变量保证增减同步。Java的原子变量是一种精度更细的同步机制,在高度竞赛的状况下,锁的功能将超过原子变量的功能,但在更真实的竞赛状况,原子变量享有更好的功能。f310ad455d2549801a6518c52fc9ad6f.png

publicclassSpringGift{

privateStringrole;

privateAtomicIntegergift;

publicStringgetRole(){

returnrole;

}

publicvoidsetRole(Stringrole){

this.role=role;

}

publicAtomicIntegergetGift(){

returngift;

}

publicvoidsetGift(AtomicIntegergift){

this.gift=gift;

}

publicintgetRemainCount(){

returnthis.gift.get();

}

}

2.选用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里,然后用Job守时将红包信息推送给玩家。每一批玩家的抢红包恳求,其实操作的都是从行列中弹出的第一个红包元素,但当时的红包数量为空的时分,主动弹出下一个红包(如果有的话)。

publicclassTest{

publicstaticConcurrentLinkedQueuequeue;

publicstaticSpringGiftcurrGift;

publicstaticAtomicIntegercount=newAtomicInteger();

staticclassmyThreadimplementsRunnable{

publicvoidrun(){

handleEvent();

}

}

publicstaticvoidmain(String[]args)throwsException{

queue=newConcurrentLinkedQueue();

for(inti=0;i<3;i++){

SpringGiftgift=newSpringGift();

gift.setRole(“role”+i);

gift.setGift(newAtomicInteger(50));

queue.add(gift);

}

myThreadmythread=newmyThread();

for(inti=0;i<1000;i++){

newThread(mythread).start();

}

System.err.println(“一共收到”+count.get());

}

privatestaticSpringGiftgetGift(){

//防止多条线程一起弹出队首

synchronized(queue){//若没有加锁,打印的count总数不对!!!!

if(currGift==null||currGift.getRemainCount()<=0){

currGift=queue.poll();

}

}

returncurrGift;

}

publicstaticvoidhandleEvent(){

try{

SpringGiftobj=getGift();

if(obj==null||obj.getRemainCount()<=0){

System.err.println(“没有了”);

return;

}

if(obj!=null&&obj.getGift().getAndDecrement()>0){

System.err.println(“抢到一个红包”);

count.getAndIncrement();

}

Thread.sleep(500);//模仿处理其他操作

}catch(Exceptione){

e.printStackTrace();

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

芯片里面100多亿个晶体管是如何安装上去的?

来源&#xff1a;金属加工如今随着芯片制程的不断提升&#xff0c;芯片中可以有100多亿个晶体管&#xff0c;如此之多的晶体管&#xff0c;究竟是如何安上去的呢&#xff1f;1当芯片被不停地放大&#xff0c;里面宛如一座巨大的城市。这是一个Top-down View 的SEM照片&#xff…

response.end后抛了异常_(七)异常处理

(七)异常处理异常异常的体系结构java.lang.Throwable|-----java.lang.Error&#xff1a;一般不便携针对性的代码进行处理|-----java.lang.Exception&#xff1a;可以进行异常的处理|-----编译时异常&#xff08;checked|-----IOException|-----FileNotFoundException|-----Clas…

AI+视频分析:实时监测无处不在的安全风险

来源丨Forbes作者丨Louis Columbus编译丨科技行者纵观2020年运营层面的诸多挑战&#xff0c;公共事业企业已经意识到对其所运营的物理及网络安全体系进行360度全方位审视的重要意义。最近&#xff0c;由Gartner发布的调查报告显示&#xff0c;94%的北美CIO认为&#xff0c;对偏…

python 绘图的背景颜色不要_matplotlib自定义添加 “哆啦A梦”背景图,这个操作真牛逼!...

为什么需要加星标&#xff1f;由于微信公众号出现了 “乱序” 排列的状况&#xff0c;也就是说&#xff1a;文章不会按照 “时间顺序” 推送给你。那么朋友们就不能第一时间&#xff0c;收到我的干货。因此希望您抽出一分钟&#xff0c;完成如下三步。数据分析与统计学之美原创…

台积电2nm工艺重大突破!

来源&#xff1a;万物智能视界根据最新报道&#xff0c;台积电已经在2nm工艺上取得一项重大的内部突破&#xff0c;虽未披露细节&#xff0c;但是据此乐观预计&#xff0c;2nm工艺有望在2023年下半年进行风险性试产&#xff0c;2024年就能步入量产阶段。台积电还表示&#xff0…

png文件合并_png格式图片和jpg格式图片有什么区别?

两个格式的图片群文件有一定的相似之处&#xff0c;png是无损压缩&#xff0c;可以在PS中重新编辑。.jpg格式是一种压缩的图片文件&#xff0c;不能再次编辑&#xff0c;而且在解析度上也是不如.png格式。具体介绍如下&#xff1a;1、png是无损压缩&#xff0c;png即可移植网络…

python环境变量的配置_python基础教程-第一讲-带你进入python的世界

python是一门非常流行的语言&#xff0c;在前段时间网上流传的地产大佬潘石屹宣布要开始学习Python编程&#xff0c;这着实让python又火了一把&#xff0c;但确实反映出python的火热程度 。在2019年12月的世界编程语言排行榜中&#xff0c;python排名第三。2019年12月语言排行榜…

java单终端登陆_配置终端服务单一登录

配置终端服务单一登录配置终端服务单一登录单一登录是一种身份验证方法&#xff0c;允许具有域帐户的用户使用密码或智能卡登录一次&#xff0c;然后&#xff0c;不再要求其提供凭据即可访问远程服务器。若要在终端服务中实现单一登录功能&#xff0c;请确保满足下列要求&#…

Mybatis逆向工程的pojo实现序列化接口代码

情景如下&#xff0c;这两天在做一个分布式的项目&#xff0c;使用了Alibaba的dubbo作为通信工具&#xff0c;zookeeper作为register&#xff0c;由于dubbo是基于socket协议的&#xff0c;所以在进行pojo传输的时候报了异常&#xff0c;因为pojo没有实现序列化接口&#xff0c;…

重磅!2020年全球高被引科学家名单出炉!

来源&#xff1a;科睿唯安、青塔英国伦敦时间11月18日&#xff0c;科睿唯安公布了2020年度“高被引科学家”名单。入榜这份备受期待的名单的自然科学家和社会科学家均发表了多篇高被引论文&#xff0c; 其被引频次位于同学科前1%&#xff0c;彰显了他们在同行之中的重要学术影响…

机器学习—K近邻

一、算法原理 还是图片格式~ 二、sklearn实现 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import seaborn as sns mpl.rcParams[font.sans-serif] [uSimHei] mpl.rcParams[axes.unicode_minus] False from sklearn.d…

华人教授世界一流大学观察报告:斯坦福师生吃饭时,谈论的都是什么话题?...

石毓智&#xff0c;斯坦福大学博士、湖南师范大学特聘教授、新加坡国立大学终身教职。来源&#xff1a;墨香学术 微信&#xff1a;moxiangxueshu编辑 ∑Gemini只有短短120年历史的斯坦福大学&#xff0c;已有近30人获得诺奖&#xff0c;不要说世界上其他大学难以匹敌&#xff0…

tcp连接工具_基于Swoole如何搭建TCP服务,你掌握了吗?

本节将会讲解以下3个问题&#xff1a;通过Swoole如何搭建TCP服务&#xff1f;通过Swoole如何搭建TCP客户端&#xff1f;通过Swoole搭建的TCP服务&#xff0c;更深入理解Swoole的事件驱动模式通过Swoole可以快速创建一个TCP服务&#xff0c;新建一个文件命名为 tcp_server.php&a…

当物联网实时工作时,城市才是“智能”的

文章原载于&#xff1a;千家网在智能交通、数据驱动的公共安全以及平台相关和数字孪生用例相关项目强劲增长的推动下&#xff0c;到2025年&#xff0c;全球在智慧城市倡议上的支出预计将达到3270亿美元。运营转型的前景令人振奋。如果城市正确地构建了这一点&#xff0c;它们将…

复制给节点的命令_深入理解redis主从复制原理

1.复制过程从节点执行 slaveof 命令。 从节点只是保存了 slaveof 命令中主节点的信息&#xff0c;并没有立即发起复制。 从节点内部的定时任务发现有主节点的信息&#xff0c;开始使用 socket 连接主节点。 连接建立成功后&#xff0c;发送 ping 命令&#xff0c;…

php封装webservice_四种php中webservice实现的简单架构方法及实例

一&#xff1a;PHP本身的SOAP所有的webservice都包括服务端(server)和客户端(client)。要使用php本身的soap首先要把该拓展安装好并且启用。下面看具体的code首先这是服务端实现&#xff1a;class test{function show(){return the data you request!;}}function getUserInfo($…

量子计算和量子模拟研究获进展

来源&#xff1a;中国科学技术大学北京时间11月19日&#xff0c;中国科学技术大学潘建伟、苑震生等与德国海德堡大学、意大利特伦托&#xff08;Trento&#xff09;大学的合作者在超冷原子量子计算和模拟研究中取得重要突破&#xff1a;他们开发了一种专用的量子计算机——71个…

05设计模式——抽象工厂模式

前言&#xff1a;以下总结来自龙哥---左潇龙博客。 总结的很到位&#xff0c;附上博客链接&#xff1a;http://www.cnblogs.com/zuoxiaolong/p/pattern6.html 抽象工厂模式算是工厂相关模式的终极形态&#xff0c;它与工厂方法唯一的区别就是工厂的接口里是一系列创造抽象产品的…

卫星发现,这里用十年逆转了千年!

以下内容影像、地形以及气象数据都来自卫星观测记录我们与这个星球如何共处并解决自身的发展问题这是我们的星球这也是我们的星球地球表面的气体流动被卫星和超级计算机所感知它们带来降雨或干旱富饶或贫瘠改变着一块又一块土地一群又一群人一个又一个时代亚洲大陆西南从印度洋…

张亚勤:新范式、新架构和新模态突破传统算力,推动物理世界走向数字化

本文转自联想创投近日&#xff0c;在联想创投2020 CEO年会上&#xff0c;清华大学讲席教授、智能产业研究院院长、美国艺术与科学院院士、百度前总裁张亚勤先生带来了《未来科技趋势展望》。张亚勤表示&#xff0c;数字化的3.0时期已经到来&#xff0c;数字化的范围已从内容、社…