我已经完成了以下Java构建:我相信主要思想是消费者生产者的概念。
现在,我进入了最后一步:一旦独立的线程引擎处理了http请求No1,我需要通知它来自哪个特定的servlet线程(例如No1),以便我能够回答,即将响应发送回相应的客户端。
如何解决这个线程问题?单线程引擎如何每次通知正确的servlet线程?我该怎么编码这个?
发布于 2012-07-22 13:44:12
我不知道这些需求是从哪里来的,但是有几种解决这个问题的更简单的方法:
ExecutorService。只需向池提交一个任务并阻止返回的Future对象。非常简单有效。一旦您的任务就绪,Future.get()将返回结果AsyncContext对象返回HTTP。如果确实需要使用队列和单独的线程,请查看Java锁,锁和条件。但这是更低层次的工作。
发布于 2012-07-22 13:44:31
使用SingleThreadExecutor。让servlet创建可调用对象并将它们提交给执行器,然后在返回的未来调用get():
Callable<Foo> callable = new Callable<Foo>() {
// TODO implement call();
};
Future<Foo> future = executor.submit(callable);
Foo result = future.get();发布于 2012-07-22 13:42:39
是否有很好的理由让您在单独的线程中有一个队列来执行这项工作?如果servlet需要等待处理结果才能将响应返回给客户端,那么为什么不直接在同一个线程中执行处理并同步返回结果呢?
如果您真的想异步地完成一些事情,可以使用未来对象来检查计算的完成状态,并获得其结果。
https://stackoverflow.com/questions/11600737
复制相似问题