开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:线程安全问题】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/537/detail/7292
struts2的线程安全问题
内容介绍:
一、什么是线程安全
二、辩证地看待线程安全
一、 什么是线程安全
1、线程安全的概念
(1)在一个进程中有多个线程并发执行,每个线程执行过程中,变量值是相同的,执行结果也是相同的。
线程安全的,弱国执行结果不同,那线程就是不安全的。
(2)是否单立就决定是否线程安全
例如:
在 Servlet 中:
package cn.sxt.servlet;
import java.io.IOException;
public class UserServlet extends HttpServlet{
private int count=e;
@override
protected void service(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException {
count++;
}
}
线程是不安全的;
package cn.sxt.servlet;
import java.io.IOException;
public class UserServlet extends HttpServlet{
@override
protected void service(HttpServletRequest req,HttpServletResponse resp)
throws servletException,IOException {
int count=0;
count++
}
}
线程是安全的。
2、Struts2线程安全吗
每次请求都会重新创建新的 action 对象,所以线程安全。
由于 action 对象是 struts2,反射生成的,所以要求 Action 类要有一个公共的无参构造方法。
二、辩证地看待线程安全
线程安全不一定好,要辩证地去看待
好的方面:
有许多并发量的时候,就不会出问题;
不好的方面:
每次使用都需要新创建对象,消耗大量时间和内存。
不同的应用要选择不同的框架去做。