保证线程执行顺序先到先得

时间:2011-03-28 17:39:10

标签: java multithreading concurrency

我从调用外部服务的servlet调用了代码。当然,不能保证服务返回响应需要多长时间。我需要确保一次只能执行一次对此服务的调用,但是servlet容器当然可以运行对servlet的并发请求。我想保证请求的优先级是以先到先得的服务器为基础处理单个文件。因此,我对外部servlet的调用是否同步是不够的,因为一旦当前调用完成,就不能保证哪个线程进入下一个调用。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

你可以使用公平的锁

Lock lock = new ReentrantLock(true);

这会按照尝试的顺序给出锁定。

答案 1 :(得分:4)

您可以single-threaded ExecutorService使用submit Callable(执行实际请求)并等待Futurebecome available

答案 2 :(得分:1)

java.util.concurrent中的许多实用程序都适用于这种情况,Semaphore具有公平性设置是另一种选择

import java.util.concurrent.*;
Semaphore sem = new Semaphore (int n = HOW_MANY_PERMITS, boolean fairness = true);

答案 3 :(得分:0)

在servlet中创建一个工作线程并在那里将标注排入队列。请求处理会在向队列添加请求时同步,然后只是坐在那里等待工作线程报告回来。