Java编程语言好不好学?高并发接口该怎么设计?Java是一门面向对象编程语言,具有简单性、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点,是互联网行业应用最广泛的编程语言。很多人看好Java的市场前景,选择参加专业的学习快速入行,但学习Java的过程并不轻松,一部分人就被高并发知识点难倒,下面就给大家讲解一下如何设计高并发接口。
1、并发列的选择。
Java的并发包提供了三个常用的并发队列实现,分别是:ArrayBlockingQueue、ConcurrentLinkedQueue和LinkedBlockingQueue。ArrayBlockingQueue是**初始容量固定**的阻塞队列,我们可以用来作为数据库模块成功竞拍的队列;ConcurrentLinkedQueue使用的是CAS原语无锁队列实现,是一个异步队列,入队的速度很快,出队进行了加锁,性能稍慢;LinkedBlockingQueue也是阻塞的队列,入队和出队都用了加锁,当队空的时候线程会暂时阻塞。
在选择并发列时,我们要根据实际情况来选择。一般在在请求预处理阶段,我们的系统入队需求要远大于出队需求,不会出现队空的情况,所以可以选择ConcurrentLinkedQueue来作为我们的请求队列实现。
2、请求接口的合理设计。
一个秒杀或抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后台请求接口。静态HTML等内容是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在最短的时间里返回用户的请求结果。仍然直接面向MySQL之类的存储是不合适的,如果有这种复杂业务的需求,都建议采用异步写入。
3、高并发下的数据安全。
多线程写入同一个文件的时候,会存现“线程安全”的问题。秒杀和抢购的场景中另外一个问题是“超发”,如果在这方面控制不慎,会产生发送过多的情况。解决线程安全的思路很多,“悲观锁”是一个很好的方法,就是在修改数据的时候,采用锁定状态,排斥外部请求的修改。遇到加锁的状态,就必须等待,但我们的场景是“高并发”,请求等待过多就会死在那里。
因此,我们可以采用乐观锁的思路。即采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。只有版本号符合的才能更新成功,其他的返回抢购失败。这样的话,我们就不需要考虑队列的问题,不过,它会增大CPU的计算开销。但是,综合来说这是一个比较好的解决方案。
如果你想了解更多Java编程,可以参加专业的学习。专业的学习能提取企业要求必须掌握的技能,摒弃不重要的技能,一方面保证了就业需要掌握技能点,另一方面节省了学习的时间。