java – 使用Jersey进行多线程处理

以下两个链接似乎相互矛盾.我很快就会信任这些文档:

Link 1

Request processing on the server works by default in a synchronous processing mode

Link 2

It already is multithreaded.

我的问题:

哪个是对的.可以同步和多线程吗?

为什么文档会说以下内容?:

in cases where a resource method execution is known to take a long time to compute the result, server-side asynchronous processing model should be used

如果文档是正确的,为什么默认操作是同步的?对于用户体验,默认情况下,所有请求在客户端javascript上都是异步的,因此服务器端的默认操作也应该是异步的.

如果客户端不需要按特定顺序提供请求,那么谁在乎操作的“昂贵”.不应该所有操作都只是异步吗?

解决方法:

Request processing on the server works by default in a synchronous processing mode

每个请求都在一个单独的线程上处理.该请求被认为是同步的,因为该请求会保留线程,直到请求完成处理.

It already is multithreaded.

是的,服务器(容器)是多线程的.对于每个进入的请求,都会从线程池中获取一个线程,并且该请求与特定请求相关联.

in cases where a resource method execution is known to take a long time to compute the result, server-side asynchronous processing model should be used

是的,这样我们就不会阻止容器线程了.容器线程池中只有很多线程来处理请求.如果我们用长处理请求来保存它们,那么容器可能会用完线程,阻止其他请求进入.在异步处理中,Jersey将线程交给容器,并自己处理请求处理本身线程池,直到进程完成,然后将响应发送到容器,在那里它可以将响应发送回客户端.

If the client does not need to serve requests in a specific order, then who cares how “EXPENSIVE” the operation is.

不确定客户在这里做了什么.或者至少在您如何提出问题的背景下.抱歉.

Shouldn’t all operations simply be asynchronous?

如果所有请求都很快,不一定.虽然你可以为它做一个论证,但这需要性能测试,你可以相互抵制并从那里做出决定的数字.每个系统都不同.

上一篇:java – 如何在Jersey中使用自定义验证


下一篇:java – Spring-Jersey:如何返回静态内容?