servlet请求/输入流和响应/输出流的线程安全符合servlet规范

xdnvmnnf  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(157)

我正在浏览servlet规范的线程安全部分。上面写着
请注意,除了startasync和complete方法之外,请求和响应对象不是线程安全的。如果这些对象是在多个线程中访问的,那么应该同步访问,或者通过 Package 器来添加线程安全性,例如,同步方法的调用以访问请求属性,或者使用线程内的响应对象的本地输出流。
我的理解是,如果有多个应用程序线程试图访问inputstream/request对象,我们需要确保对这些对象的访问是线程安全的,同样,如果有多个线程试图访问outputstream/response对象,我们需要确保线程安全。
假设有一个线程试图访问请求/输入流,而另一个线程试图独立地访问响应/输出流,那么我们还需要确保这些线程之间的线程安全吗?
我相信我们可以有一个线程句柄servletinputstream和另一个线程句柄servletoutputstream,两者都可以是完全独立的,并且是线程安全的。
例如:客户机正在发送分块的http请求数据(使用servletinputstream阻止读取),而服务器正在发送分块的http响应数据(通过servletoutputstream阻止写入),两者都可以独立并发地工作,而不需要任何同步。按照上述规格,这样公平吗?还是违反了规范?
请注意,这个问题与servlet的阻塞线程模型有关,在读取inputstream时,只要有基于后端业务逻辑的数据可用,并且不使用startasync,数据就被写入outputstream,尽管底层web容器可能像undertow或jetty那样是非阻塞/异步的。
还有,这是什么意思 using a local output stream for the response object within a thread 在上述规范中?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题