【发布时间】:2014-05-27 15:51:49
【问题描述】:
我有一个 Java servlet,它使用重量级且线程不安全的资源来处理用户请求。资源是一个需要很长时间才能被实例化(最多10秒)并且占用大量内存的对象。 但是当对象被分配时,运行它的方法需要很短的时间我需要处理一个请求。
可以有多个这样的资源,彼此不同。 每个请求都带有一个 ID,它指出了特定的资源。 我希望实现一个此类资源池,以便具有相同 ID 的请求不会实例化新对象,而是从池中选择一个。
方案如下:
- 在收到请求后,servlet 会检查具有请求 ID 的资源是否在池中
- 如果没有,servlet 会创建一个并提供它
- 如果资源已经实例化,请求进入队列等待执行,doPost 等待它。
对不同资源的操作必须是并发的,但在同一资源内是同步的。
我是 Java 中的多线程新手,ThreadPoolExecutor 似乎无法按原样使用,因此我将不胜感激如何实现上述方案的建议。谢谢。
【问题讨论】:
标签: java multithreading tomcat servlets pool