【问题标题】:How to make a Web Service be use multiple threads?如何使 Web 服务使用多个线程?
【发布时间】:2012-05-03 21:48:22
【问题描述】:

我有一个简单的 java web 服务。我想让 Web 服务被线程化,每个对 Web 方法的调用都有自己的线程来进行处理。处理需要很长时间,我不希望它阻塞,防止发生对 web 方法的其他调用。相反,我希望 web 方法只创建线程,并让线程本身在完成处理后向客户端响应/返回一个值。这可能吗?

编辑:

这是我现在拥有的半伪代码:

@WebService(endpointInterface="Service")
public class ServiceImpl {

    public ServiceImpl() 
    {
        // Initialization
    }

    public String GetResult(input)
    {
        // Does long processing

        return Result;
    }
}

我想要做的是代替 GetResult() 进行长时间处理,我希望它只生成 Runnable 来进行长时间处理并让 GetResult() 返回并准备好为另一个请求提供服务。我还希望 Runnable 响应等待的客户端。

编辑 2:

我刚刚意识到我在问一个愚蠢的问题。我对实施 WS 还很陌生。我原以为 WS 按顺序一次只接受一个请求。我不知道每个请求都已经自动线程化了。

【问题讨论】:

  • 有可能。你试过什么。你做了什么搜索。你看过什么代码?请编辑您的问题并提供更多详细信息。
  • 你有什么样的客户?服务器端?命令行/批处理?图形用户界面?摇摆? JavaFX?
  • 看起来你真的要求 WS 是异步的......这也是可能的。
  • @vkraemer 是的,这就是我想要的。你如何让 WS 异步运行,这样它就不会停留在一个方法调用上。
  • 关于编辑 2... 您需要确保您的服务代码是线程安全的,以利用自动线程化的请求。

标签: java multithreading service web


【解决方案1】:

是的,您可以使用 JMS 进行异步调用。这是最好的方法。

您也可以启动一个线程并自己管理它们。一般不建议这样做。线程池的良好管理以及跟踪哪些线程可能需要很长时间需要大量的开销代码。

【讨论】:

  • 我不是在寻找异步调用,因为我不在乎客户端是否在等待响应时被挂起(我什至延长了超时时间)。我更担心 WS 一次只能为一个客户提供服务,因为处理时间相当长(约 10 分钟)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
相关资源
最近更新 更多