bla*_*666 16 java multithreading tomcat
使用java线程时,必须通过同步等处理并发性带来的基本问题.
AFAIK Tomcat还可以与线程一起处理其工作负载.为什么我在Tomcat中运行时不必考虑使代码线程安全?
ska*_*man 36
你也必须让你的代码的线程在Tomcat中是安全的.Tomcat将从多个线程调用您的代码(即您的servlet),如果该代码不是线程安全的,那么您将遇到问题.
Tomcat的线程与您自己创建的任何线程没有什么不同.
mat*_*t b 22
要添加到skaffman提到什么,这似乎是你不需要编写web应用程序时,考虑多线程,因为Servlet的框架/ API是面向完全围绕实现方法(service(),doGet(),doPost()等),这些调用一次每个HTTP请求.
因此,在一个简单的应用程序中,您可以在servlet和/或JSP中实现这些方法,或者不考虑多线程交互时会发生什么.
但是第二个你开始在servlet或服务方法之间共享状态,然后没有意识到你正在处理多个线程交互,如果你不小心,你最终会遇到多线程或同步问题.你将不得不处理这个因为在Tomcat中(我假设所有的servlet容器,虽然我不知道它是否是Servlet规范所要求的)每个请求都由(可能)一个不同的线程处理.因此,如果您同时收到两个请求,这些请求将由两个单独的线程同时处理(同时).
如果您认为 Tomcat 使您的应用程序线程安全,请编写一个具有可变成员变量(如非并发哈希图)的 Servlet。
然后让 servlet 为每个请求将内容放入该哈希图中。很快就会得到一个可爱的并发异常。
这就是为什么通常对于类似单例的组件你必须非常小心成员变量,因为它们在访问对象的多个线程之间共享。
现在 servlet 容器为每个请求创建一个新的瞬态对象(这是某些 Web 应用程序框架所做的),您可以将与成员变量交互的行为放入该瞬态对象中,并且是线程安全的。
| 归档时间: |
|
| 查看次数: |
21681 次 |
| 最近记录: |