用多线程模仿多人一起抢红包。服务端将玩家发出的红包保存在一个行列里,然后用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实现抢红包功用相关推荐

  1. java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)

    既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...

  2. java读取qq邮箱_java获取qq邮箱中的好友列表

    评论 # re: java获取qq邮箱中的好友列表 2009-05-07 20:56 咖啡@可乐 # re: java获取qq邮箱中的好友列表 2009-05-08 09:07 EverestSnow ...

  3. java实现qq抢红包_Java实现抢红包功能

    本文实例为大家分享了Java实现抢红包功能的具体代码,供大家参考,具体内容如下 关键思想: 1.抢红包涉及多人并发操作,需要做好同步保证多线程运行结果正确. 2.由于同时在线人数大,从性能方面考虑,玩 ...

  4. java实现qq抢红包_Java实现抢红包算法,附完整代码(公平版和手速版)

    当我们在群里抢红包时真的是手速越快红包金额越大吗? 当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) ...

  5. java抢红包_Java实现抢红包功能

    采用多线程模拟多人同时抢红包.服务端将玩家发出的红包保存在一个队列里,然后用Job定时将红包信息推送给玩家.每一批玩家的抢红包请求,其实操作的都是从队列中弹出的第一个红包元素,但当前的红包数量为空的时 ...

  6. java基础多线程抢红包_Java实现抢红包功能

    采用多线程模拟多人同时抢红包.服务端将玩家发出的红包保存在一个队列里,然后用Job定时将红包信息推送给玩家.每一批玩家的抢红包请求,其实操作的都是从队列中弹出的第一个红包元素,但当前的红包数量为空的时 ...

  7. java 实现秒抢_Java实现抢红包算法,附完整代码(公平版和手速版)

    当我们在群里抢红包时真的是手速越快红包金额越大吗? 当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) ...

  8. java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能

    其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...

  9. java发送qq邮箱_Java 发送QQ邮箱邮件

    如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成: props.put("mail.smtp.auth", "true" ...

最新文章

  1. 树莓派udev不能自动挂载_直播课:教你用树莓派实现智能商店的自动结账
  2. [精选代码笔记]Anagram, group-anagrams, two sum
  3. 关于css的text-indent首行缩进两个字符和图片缩进的问题
  4. svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
  5. CCIE-LAB-第三篇-VRRP+SLA
  6. 安装ssd后不识别网卡_100元体验纯正万兆网络:需要安装SSD的NAS服务器
  7. 杭州获评全国最智慧城市
  8. 测试学开发——第一课:环境搭建与页面开发介绍。
  9. android mysql 乱码_android POST数据遇到的UTF-8编码(乱码)问题解决办法
  10. 响应头中content-type常用的类型有哪些?
  11. 微型计算机基础知识提纲,自考“微型计算机应用基础”自考大纲(6)
  12. idea如何操控git分支
  13. 【线性代数笔记】秩为1的矩阵的性质
  14. Block Formatting Context (Flow Root)
  15. linux git ssh目录权限,Git SSH Key的配置问题
  16. 【NLP】文本分类算法-基于字符级的无词嵌入双向循环神经网络(双向 GRU)
  17. 基于web服务的文件共享平台pydio搭建教程
  18. Linux下安装OpenOffice
  19. java gc内存_Java内存模型和GC机制
  20. C#远程服务器返回错误: (500) 内部服务器错误

热门文章

  1. LeetCode 797. 所有可能的路径(DFS)
  2. php实现文字向左跑马灯,js实现文字跑马灯效果
  3. 修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像
  4. 计算尖峰电流的目的_入门必看!负荷计算的目的、方法以及原则详解
  5. 基坑监测日报模板_基坑监测有多重要?实录基坑坍塌过程,不亲身经历,不知道现场有多恐怖!...
  6. python输入以及比较逻辑运算符介绍(含笔记)
  7. excel去重_数据处理之EXCEL的高效技巧分享
  8. 学完文本知识,我就直接看懂图片了!
  9. 快手搜索技术部招聘NLP算法工程师!
  10. 简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽