JAVA如何用队列实现并发?

比如名额50,客户端需要提交抢名额,可能同一时间有两个人抢,JAVA如何用队列实现这种并发呢?网上看是用LINKLIST,但是服务端和客户端是单线程吗?比如一个用户登陆,服务端的操作也只针对这个人, 服务端如何把每个人的请求放到LINKLIST里呢?请大神麻烦解释一下。

第1个回答  推荐于2017-11-26
如果是抢资源,在不作弊的情况下 按照先来先得的规则 ,那么比较简单的实现就是队列 ,不管请求的并发多高,如果用线程来实现为用户服务,也就是说 来一个人请求资源那么就启动一个线程,那CPU执行线程总是有顺序的,比如 当前三个人(路人甲路人乙路人丙)请求A资源 ,那服务端就起了三个线程为这三个人服务,假设 这三个人不太幸运在请求的时候没有及时的获得CPU时间片,那么他们三个相当于公平竞争CPU资源,而CPU选择运行线程是不确定顺序的 ,又假设 选中了路人丙的线程运行那么将其放入队列就好了,路人乙,路人丙以此类推 ,那可能会想为什么不及时的处理呢 ,因为后续的操作可能是耗时操作对于线程的占用时间较长那请求资源的人多了服务端就可能挂了追问

JAVA如何实现队列呢?代码是写在服务端吗?那不是针对单个请求用户的操作?有点概念不清 可否解释一下。

追答

首先说 队列这种数据结构你应该了解吧 。
可以用JDK自带的 或者自己实现的也行,你问的如何实现队列是指的队列这中数据结构? 如果是 ,那你还是自己看数据结构那本书,原理都一样 跟语言无关, 你可用JDK自带的几种队列 查看JDKAPI文档 实现了Queue接口的各种队列基本都有,比如 线程安全的 ConcurrentLinkedQueue 这个是一个无界的线程安全的队列 或者 ArrayBlockingQueue 这个队列实现是一个有界阻塞队列 都能够实现你说的 或者 你用非线程安全的也成 只不过你自己控制线程的安全性就好了;

代码是写在服务端的,譬如 http服务器代码 或者你自定义的其他服务端代码 接收到请求 你就把请求的信息入队就好了。
不知道我说清楚了没有?

本回答被提问者采纳
相似回答