Java 对servlet的请求排序
假设我有一个servlet,它在Java 对servlet的请求排序,java,multithreading,Java,Multithreading,假设我有一个servlet,它在doPost方法上执行一些操作。此外,我还有一些连接池(假设是连接池中的NConnections),这些连接是在每次请求我的servlet时从池中获取的(每个请求一个连接)。在servlet的doPost方法中,我从池中检索一个连接,使用它(此操作可能持续太久),然后将其放回池中 假设同时建立了到servlet的N连接,因此将从池中检索N连接。在处理该请求时,N+1和N+2请求到达,因此它们将等待某些连接释放(我的池由BlockingQueue支持) 我想保证N+
doPost
方法上执行一些操作。此外,我还有一些连接池(假设是连接池中的N
Connections),这些连接是在每次请求我的servlet时从池中获取的(每个请求一个连接)。在servlet的doPost
方法中,我从池中检索一个连接,使用它(此操作可能持续太久),然后将其放回池中
假设同时建立了到servlet的N
连接,因此将从池中检索N
连接。在处理该请求时,N+1
和N+2
请求到达,因此它们将等待某些连接释放(我的池由BlockingQueue
支持)
我想保证N+1
请求比N+2
请求更早拥有可用连接
如何实现这一点?提供构造函数参数来控制队列的公平性-当设置为true
时,可以保证线程将以调用take()
的相同顺序获取队列元素
据我所知,使用
ArrayBlockingQueue
和fair=true
作为池的后备队列应该足以满足您的需要。ArrayBlockingQueue由固定大小的数组提供后备。请记住IllegalStateException。如果在实例化之前队列的大小未知怎么办?@maks:由于LinkedBlockingQueue
没有公平选项,您必须基于公平同步原语实现自己的阻塞队列。看见