我通过JAX-WS遇到Web服务问题。如果我在web方法中启动线程,它将在与客户端的连接结束时结束。
示例:
@WebMethod(operationName="test")
public boolean test()
{
Thread th = new MyThread();
th.start();
// Thread is running
...
return true;
// Now thread th ends;
}
有没有解决方案让线程保持运行?
答案 0 :(得分:5)
问题是您正在尝试在Java EE应用服务器上启动线程。手动线程违反了Java EE规范,这就是您遇到问题的原因。在某些应用服务器上,您根本无法启动一个单独的线程。来自规范:
企业bean不得尝试管理线程。企业bean不得尝试启动,停止,暂停或恢复线程,或更改线程的优先级或名称。企业bean不得尝试管理线程组。这些函数是为EJB容器保留的。允许企业bean管理线程会降低容器正确管理运行时环境的能力。
如果您需要在单独的线程上完成工作,则需要使用应用服务器提供的工具进行异步工作。一些选项是将数据排队到JMS队列以供MDB处理或者可能使用异步ejb请求(想想在Java EE 6中)。
答案 1 :(得分:0)
如果你只是想在返回之前确定线程已经完成 - 最简单的方法是th.join()。此方法等待线程死亡。