Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对servlet的请求排序_Java_Multithreading - Fatal编程技术网

Java 对servlet的请求排序

Java 对servlet的请求排序,java,multithreading,Java,Multithreading,假设我有一个servlet,它在doPost方法上执行一些操作。此外,我还有一些连接池(假设是连接池中的NConnections),这些连接是在每次请求我的servlet时从池中获取的(每个请求一个连接)。在servlet的doPost方法中,我从池中检索一个连接,使用它(此操作可能持续太久),然后将其放回池中 假设同时建立了到servlet的N连接,因此将从池中检索N连接。在处理该请求时,N+1和N+2请求到达,因此它们将等待某些连接释放(我的池由BlockingQueue支持) 我想保证N+

假设我有一个servlet,它在
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
没有公平选项,您必须基于公平同步原语实现自己的阻塞队列。看见