使用servlet中是否需要考虑线程问题
package day09;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* servlet在tomcat服务器中,是单实例多线程的
* @author Administrator
*
* 在开发线程安全的servlet的建议:
* 1)尽量不要使用成员变量,或者静态成员变量。
* 2)必须要使用成员变量,要么给使用了成员变量的代码块加同步锁,
* 但是加锁的代码块的范围应该尽量的小,不然会影响到程序并发的
* 效率。
*/
public class ThreadDemo extends HttpServlet {
private static final long serialVersionUID = 814256409238690261L;
// 成员变量:那么该数据就可能被不同的用户线程共享到。有可能引发多线程并发问题。
// int count = 1;
static int count = 1;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/**
* 给使用到共享数据的代码添加同步锁
* 注意:同步锁必须多线程唯一的
*
* 当前类的类对象一定是唯一的(每个类的类对象一定是唯一的):并且当前类是单例的嘛
*/
// 同步代码块
synchronized (ThreadDemo.class) {
response.getWriter().write("您当前是第"+count+"个访客!");
count++;
}
// 同步方法
myMethod(response);
}
/* 同步方法
* 注意这里应该是静态的同步方法!!!如果是非静态的话就会产生多把钥匙,注意!!!
*/
public static synchronized void myMethod(HttpServletResponse response) throws IOException {
response.getWriter().write("您当前是第"+count+"个访客!");
count++;
}
}
使用servlet中是否需要考虑线程问题的更多相关文章
- Servlet生命周期与线程安全
上一篇介绍了Servlet初始化,以及如何处理HTTP请求,实际上在这两个过程中,都伴随着Servlet的生命周期,都是Servlet生命周期的一部分.同时,由于Tomcat容器默认是采用单实例多线程 ...
- Servlet规范简介——web框架是如何注入到Servlet中的
Servlet规范简介--web框架是如何注入到Servlet中的 引言 Web框架一般是通过一个Servlet提供统一的请求入口,将指定的资源映射到这个servlet,在这个servlet中进行框架 ...
- springmvc中request的线程安全问题
SpringMvc学习心得(四)springmvc中request的线程安全问题 标签: springspring mvc框架线程安全 2016-03-19 11:25 611人阅读 评论(1) 收藏 ...
- Servlet中进行context属性的同步
Servlet中进行context属性的同步: 必须所有使用context的servlet都进行synchronized才可以实现同步: servlet: package com.stono.serv ...
- servlet中的8个Listener
servlet中的8个Listener: Xml: <?xml version="1.0" encoding="UTF-8"?> <web-a ...
- Servlet的多线程和线程安全
线程安全 首先说明一下对线程安全的讨论,哪种情况我们可以称作线程安全?网上对线程安全有很多描述,我比较喜欢<Java并发编程实战>给出的定义,“当多个线程访问某个类时,不管运行时环境采用何 ...
- JSP Servlet中Request与Response所有成员方法的研究
HttpServletRequest与HttpServletResponse作为Servlet中doGet.doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返 ...
- JSP Servlet中的Request和Response的简单研究
本文参考了几篇文章所得,参考目录如下: 1.http://www.cnblogs.com/guangshan/p/4198418.html 2.http://www.iteye.com/problem ...
- Java 之 Servlet中的生命周期
Servlet 生命周期 一.重写servlet方法 当创建一个类,继承 servlet 这个接口时,需要实现里面的抽象方法. import javax.servlet.*; import java. ...
随机推荐
- 【译】.NET 对象分配工具
随着 Visual Studio 16.10 的发布,性能分析器又有了一个新的分析引擎,.NET 对象分配工具是第一个加入的工具.这为该工具提供了一些新特性,并显著提高了 perf 性能.在你的 C# ...
- 【LeetCode】344. 反转字符串
344. 反转字符串 知识点:字符串; 双指针 题目描述 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改 ...
- 【LeetCode】203.移除链表元素
203.移除链表元素 知识点:链表:双指针 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 ...
- python安装pyeda库--windows版
本页介绍了如何购买自己的PyEDA闪亮副本.PyEDA项目的主要目标是成为主流的Python软件包,并遵守社区中遵守的大多数约定. 支持平台 PyEDA支持Windows以及任何带有C编译器的平台.作 ...
- At 、Crontabl定时任务
之前笔者是在本地写的博客,然后用 windows 定时任务启动写的脚本上传到 Github 上,现在又遇到了 Linux 上的定时任务,项目还要用到 Quartz 定时任务框架 1. 一次性定时任务 ...
- mysql 占用90%多的CPU,解决思路
网站打开很慢,爆出了连接数据库的错误,进入服务器,top 看了下,mysql占用cpu 基本维持在90以上: mysql> show variables like '%slow%'; ...
- DC-2 靶机渗透测试
DC-2 靶机渗透测试 冲冲冲,好好学习. 本靶机核心内容"受限shell提权",知识点在另一篇文章中总结归纳了. 攻击机:kali 靶 机:DC-2 准备:在使用前需要在操作机的 ...
- linux下编译常见错误
1.浮点数例外:除数为0 2.已杀死:空间过大 3.已放弃:时间过长 4.段错误:递归 / 循环出不来
- 使用 GLFW 在 OpenGL 的场景中漫游
前言 前面已经建立了 OpenGL 框架,加载了 3D 模型,但是还没有在场景中漫游的功能.为了展示 3D 模型,我只是简单地利用变换视图矩阵的方式使模型在视野中旋转.同时,之前的程序连最简单的改变窗 ...
- Kali中John的使用方法
John是一个破解系统密码的工具. 参数 John the Ripper 1.9.0-jumbo-1 OMP [linux-gnu 64-bit x86_64 AVX AC] Copyright (c ...