java实现qq抢红包_Java实现抢红包功用
用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里,然后用Job守时将红包信息推送给玩家。每一批玩家的抢红包恳求,其实操作的都是从行列中弹出的第一个红包元素,但当时的红包数量为空的时分,主动弹出下一个红包(如果有的话)。
关键思维:
1.抢红包涉及多人并发操作,需求做好同步保证多线程运行结果正确。
2.因为一起在线人数大,从功能方面考虑,玩家的发红包恳求不必及时响应,而由服务端守时履行发红包行列。
下面是主要的代码和完成逻辑阐明
1.创建一个类,表示红包这个实体概念。直接选用原子变量保证增减同步。Java的原子变量是一种精度更细的同步机制,在高度竞赛的状况下,锁的功能将超过原子变量的功能,但在更真实的竞赛状况,原子变量享有更好的功能。
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();
}
}
}
java实现qq抢红包_Java实现抢红包功用相关推荐
- java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)
既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...
- java读取qq邮箱_java获取qq邮箱中的好友列表
评论 # re: java获取qq邮箱中的好友列表 2009-05-07 20:56 咖啡@可乐 # re: java获取qq邮箱中的好友列表 2009-05-08 09:07 EverestSnow ...
- java实现qq抢红包_Java实现抢红包功能
本文实例为大家分享了Java实现抢红包功能的具体代码,供大家参考,具体内容如下 关键思想: 1.抢红包涉及多人并发操作,需要做好同步保证多线程运行结果正确. 2.由于同时在线人数大,从性能方面考虑,玩 ...
- java实现qq抢红包_Java实现抢红包算法,附完整代码(公平版和手速版)
当我们在群里抢红包时真的是手速越快红包金额越大吗? 当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) ...
- java抢红包_Java实现抢红包功能
采用多线程模拟多人同时抢红包.服务端将玩家发出的红包保存在一个队列里,然后用Job定时将红包信息推送给玩家.每一批玩家的抢红包请求,其实操作的都是从队列中弹出的第一个红包元素,但当前的红包数量为空的时 ...
- java基础多线程抢红包_Java实现抢红包功能
采用多线程模拟多人同时抢红包.服务端将玩家发出的红包保存在一个队列里,然后用Job定时将红包信息推送给玩家.每一批玩家的抢红包请求,其实操作的都是从队列中弹出的第一个红包元素,但当前的红包数量为空的时 ...
- java 实现秒抢_Java实现抢红包算法,附完整代码(公平版和手速版)
当我们在群里抢红包时真的是手速越快红包金额越大吗? 当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) ...
- java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能
其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...
- java发送qq邮箱_Java 发送QQ邮箱邮件
如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成: props.put("mail.smtp.auth", "true" ...
最新文章
- 树莓派udev不能自动挂载_直播课:教你用树莓派实现智能商店的自动结账
- [精选代码笔记]Anagram, group-anagrams, two sum
- 关于css的text-indent首行缩进两个字符和图片缩进的问题
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- CCIE-LAB-第三篇-VRRP+SLA
- 安装ssd后不识别网卡_100元体验纯正万兆网络:需要安装SSD的NAS服务器
- 杭州获评全国最智慧城市
- 测试学开发——第一课:环境搭建与页面开发介绍。
- android mysql 乱码_android POST数据遇到的UTF-8编码(乱码)问题解决办法
- 响应头中content-type常用的类型有哪些?
- 微型计算机基础知识提纲,自考“微型计算机应用基础”自考大纲(6)
- idea如何操控git分支
- 【线性代数笔记】秩为1的矩阵的性质
- Block Formatting Context (Flow Root)
- linux git ssh目录权限,Git SSH Key的配置问题
- 【NLP】文本分类算法-基于字符级的无词嵌入双向循环神经网络(双向 GRU)
- 基于web服务的文件共享平台pydio搭建教程
- Linux下安装OpenOffice
- java gc内存_Java内存模型和GC机制
- C#远程服务器返回错误: (500) 内部服务器错误
热门文章
- LeetCode 797. 所有可能的路径(DFS)
- php实现文字向左跑马灯,js实现文字跑马灯效果
- 修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像
- 计算尖峰电流的目的_入门必看!负荷计算的目的、方法以及原则详解
- 基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...
- python输入以及比较逻辑运算符介绍(含笔记)
- excel去重_数据处理之EXCEL的高效技巧分享
- 学完文本知识,我就直接看懂图片了!
- 快手搜索技术部招聘NLP算法工程师!
- 简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽