博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2学习笔记--线程安全问题小结
阅读量:6983 次
发布时间:2019-06-27

本文共 1486 字,大约阅读时间需要 4 分钟。

    在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的,

  如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

    就是说,在一个进程中有多个线程并发执行,每个线程执行过程中,变量值是相同的,执行结果也是相同的,就是线程安全的.否则就是线程不安全的.

    然后回顾一下servlet的线程安全问题,由于servlet是单例模式的,只会产生一个实例,当多个用户同时请求一个servlet的时候,Tomcat会派生出多个线程来执行servlet的代码,因此servlet是线程不安全的,如果使用不当,可能会出现问题.下面贴一个例子:

package com.wang.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ThreadSafeServlet extends HttpServlet {    private  String name;//定义一个公共的私有变量 name    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html");        //从request域中获取name属性        name =request.getParameter("name");        //使线程休眠10秒        try {            Thread.sleep(10000);        } catch (InterruptedException e) {            e.printStackTrace();        }        //向浏览器输出name的值        response.getWriter().print("name="+name);    }}

 

    我们在十秒内分别用两个浏览器访问ThreadSafeServlet?name="zhangSan"和ThreadSafeServlet?name="liSi",显示的结果均为name=liSi,这就意味着程序出现了问题,多线程并发的读写会导致数据不同步的问题,所以我们在使用servlet的时候尽量不要定义全局的私有属性,而是把变量分别定义到doGet()和doPost()方法中去,当然如果仅仅是读操作,是不会出现问题的,因此如果要在servlet中定义全局的只读属性最好定义为final类型.

  Struts2中的Action为每个请求都创建一个实例,Action和普通的java类没有任何区别,不会出现数据不同步的情况,因此是线程安全的,

转载地址:http://zwjpl.baihongyu.com/

你可能感兴趣的文章
Ubuntu14.04搭建LAMP
查看>>
思科4506E交换机系统升级那点事!
查看>>
linux-mysql
查看>>
如何在Exchange Server 2003中重置提供OWA、EAS和OMA服务所需的默认虚拟目录
查看>>
GIT分布式版本控制系统使用教程
查看>>
1、Nginx安装和配置文件
查看>>
Centos网络管理(二)-IP与子网掩码计算
查看>>
网媒亟待建立广告价值衡量体系
查看>>
mysql-5.7.16一键安装/配置优化
查看>>
SSL握手中的个别细节
查看>>
从Linux 2.6.8内核的一个TSO/NAT bug引出的网络问题排查观点(附一个skb的优化点)
查看>>
SpringBoot 获取当前登录用户IP
查看>>
sed用法
查看>>
Windows Phone 应用发布技巧汇总
查看>>
centos6.0下安装FTP客户端命令
查看>>
【No.7 C++对象的构造与析构时间】
查看>>
Zabbix如何监控Windows机器
查看>>
SAN存储方式之falconstor实施方案(2)
查看>>
Bokeh快速入门(1)
查看>>
第一天salt stack 笔记
查看>>