
这更像是一个澄清请求,但是太长了,无法作为评论。
我不确定您现在是如何做的,因为从您编写的内容来看,仅使用请求处理线程似乎是可行的方法。像这样:
//Some webservice method (synchronous)public Result process(Blah blah){ try{ return getResult(TimeUnit.SECONDS, 10); }catch(InterruptedException e){ //No result within 10 seconds! throw new ServiceUnavailableException("blah"); }}我不确定为什么要创建线程。如果由于该
getResult方法根本不超时而被迫使用线程,则可能会发生线程泄漏。如果它在较长时间后超时,因此您想“简化”对用户的答复,那将是我考虑使用线程的唯一情况,就像我想象的那样。这可能会导致线程在负载下堆积,因此我努力避免这种情况。
也许您可以发布一些代码,让我们知道您为什么要在服务中创建代码?
另外,您的客户端界面是什么?听起来像是同步Web服务或其他东西?
在那种情况下,如果我是您,我将使用a
HashedWheelTimer作为一个单例…这种机制应该可以很好地满足您的需求(这是一个实现)。但是,不幸的是,这似乎与EJB规范中对线程的禁止和对单例的禁止相冲突。实际上,如果您这样做,实际上并没有问题。例如,请参见此讨论。我们还在EJB应用程序中使用了单例模式。使用了JBoss。但是,如果这不是一个可行的选择,那么我可能会考虑通过定义一个新的Web服务(并将其部署在Web容器中或其他东西中)隔离其自己的JVM中的处理,然后从EJB应用程序中调用该服务。但是,这显然会导致性能下降,现在您将拥有另一个全新的应用程序。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)