Java实现抢红包功用

IT技术2年前 (2022)发布 投稿用户
0

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

关键思维:
1.抢红包涉及多人并发操作,需求做好同步保证多线程运行结果正确。
2.因为一起在线人数大,从功能方面考虑,玩家的发红包恳求不必及时响应,而由服务端守时履行发红包行列。
下面是主要的代码和完成逻辑阐明
1.创建一个类,表示红包这个实体概念。直接选用原子变量保证增减同步。Java的原子变量是一种精度更细的同步机制,在高度竞赛的状况下,锁的功能将超过原子变量的功能,但在更真实的竞赛状况,原子变量享有更好的功能。

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();
}
}
}

© 版权声明
好牛新坐标 广告
版权声明:
1、IT大王遵守相关法律法规,由于本站资源全部来源于网络程序/投稿,故资源量太大无法一一准确核实资源侵权的真实性;
2、出于传递信息之目的,故IT大王可能会误刊发损害或影响您的合法权益,请您积极与我们联系处理(所有内容不代表本站观点与立场);
3、因时间、精力有限,我们无法一一核实每一条消息的真实性,但我们会在发布之前尽最大努力来核实这些信息;
4、无论出于何种目的要求本站删除内容,您均需要提供根据国家版权局发布的示范格式
《要求删除或断开链接侵权网络内容的通知》:https://itdw.cn/ziliao/sfgs.pdf,
国家知识产权局《要求删除或断开链接侵权网络内容的通知》填写说明: http://www.ncac.gov.cn/chinacopyright/contents/12227/342400.shtml
未按照国家知识产权局格式通知一律不予处理;请按照此通知格式填写发至本站的邮箱 wl6@163.com

相关文章