java限时抢购_java在商家促销中的限时抢购是怎么实现的?时间是怎么控制的?...

你好,感谢邀请,回答如下:

1.问题引入

电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。

2.大规模并发带来的挑战

高并发秒杀功能,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常状态。现在我们来讨论下,优化的思路和方法。

第一: 请求接口的合理设计

第二:高并发的挑战:一定要“快”

第三:重启与过载保护

第四:时间控制方案

1.从线程方面解决

最简单粗暴的一种实现方案:Thread.sleep(800),但事实上这种方案一定会被很快pass,因为这种方式存在一个隐患,如果在多线程环境下,线程很容易被interrupt,这样代码就会抛出异常,这样线程就会挂起,导致整个线程异常结束。实在是不够优雅,违背了我们设计的初衷。

2.使用Timer

在jdk中提供了定时器类,类的主要作用就是控制一定的时间来简单的定时执行某个任务。有点简单的elasticJob的设计味道。下面一个最简单的例子来看一下如何实现定时任务:

public class TimmerTest {

/**

* 测试方法

*/

public void test() {

Timer timer = new Timer();

timer.schedule(new MyTask(), 800);

}

public class MyTask extends TimerTask {

/**

* 运行方法

*/

@Override

public void run() {

System.out.println("输出");

}

}

}

从方法来看,类继承自MyTask就可以实现定时执行,这种方法是可以实现延时的效果,但是它有一个致命的缺点:对代码的侵入性太大,为了实现定时我们不得已将对应的方法封装成一个类,然后放在定时器里执行。但未免也有点太得不偿失了,所以这种方式也被pass掉!

但是这里延伸一下,java可结合queartz实现的定时任务。

Quartz是一个任务调度框架。

一个例子:

package com.test.quartz; import static org.quartz.DateBuilder.newDate; import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger; import java.util.GregorianCalendar; import org.quartz.JobDetail; import org.quartz.Sche

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值