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中是否需要考虑线程问题的更多相关文章

  1. Servlet生命周期与线程安全

    上一篇介绍了Servlet初始化,以及如何处理HTTP请求,实际上在这两个过程中,都伴随着Servlet的生命周期,都是Servlet生命周期的一部分.同时,由于Tomcat容器默认是采用单实例多线程 ...

  2. Servlet规范简介——web框架是如何注入到Servlet中的

    Servlet规范简介--web框架是如何注入到Servlet中的 引言 Web框架一般是通过一个Servlet提供统一的请求入口,将指定的资源映射到这个servlet,在这个servlet中进行框架 ...

  3. springmvc中request的线程安全问题

    SpringMvc学习心得(四)springmvc中request的线程安全问题 标签: springspring mvc框架线程安全 2016-03-19 11:25 611人阅读 评论(1) 收藏 ...

  4. Servlet中进行context属性的同步

    Servlet中进行context属性的同步: 必须所有使用context的servlet都进行synchronized才可以实现同步: servlet: package com.stono.serv ...

  5. servlet中的8个Listener

    servlet中的8个Listener: Xml: <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  6. Servlet的多线程和线程安全

    线程安全 首先说明一下对线程安全的讨论,哪种情况我们可以称作线程安全?网上对线程安全有很多描述,我比较喜欢<Java并发编程实战>给出的定义,“当多个线程访问某个类时,不管运行时环境采用何 ...

  7. JSP Servlet中Request与Response所有成员方法的研究

    HttpServletRequest与HttpServletResponse作为Servlet中doGet.doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返 ...

  8. JSP Servlet中的Request和Response的简单研究

    本文参考了几篇文章所得,参考目录如下: 1.http://www.cnblogs.com/guangshan/p/4198418.html 2.http://www.iteye.com/problem ...

  9. Java 之 Servlet中的生命周期

    Servlet 生命周期 一.重写servlet方法 当创建一个类,继承 servlet 这个接口时,需要实现里面的抽象方法. import javax.servlet.*; import java. ...

随机推荐

  1. MapReduce学习总结之java版wordcount实现

    一.代码实现: package rdb.com.hadoop01.mapreduce; import java.io.IOException; import org.apache.hadoop.con ...

  2. 微信小程序云开发-云开发环境配置工作

    一.注册小程序 打开[微信开发者工具],点击界面上的[注册],进入注册微信小程序页面.(也可以直接进入微信小程序注册地址:https://mp.weixin.qq.com/进行注册) 进入[小程序注册 ...

  3. linux服务器安装svn超详细介绍

    #!/bin/sh REPOS="$1" REV="$2" export LANG=en_US.UTF-8 LOG_PATH=/tmp/svn.log echo ...

  4. UnitTest 用法

    功能 1.能组织多个用例去执行 2.提供丰富的断言方法 3.提供丰富的日志与测试结果 核心要素 1.TestCase 2.TestSuite 3.TextTestRunner 4.Fixture 用法 ...

  5. IPV6改造?华为云如此简单

    现在很多企业都在搞这个IPV6改造,说实话这个IPV6改造我这边也不是特别精通,也是通过查阅各种资料来了解IPV6这个东西,下面是我查的一些资料大家可以借鉴一下. IPv6改造三步曲--Vecloud ...

  6. [考试总结]noip模拟17

    爆零了! 菜爆了 弱展了 垃爆了 没有什么可以掩饰你的菜了 这次考试为我带来了第一个 \(\color{red}{ \huge{0}}\) 分,十分欣慰.... 最近的暴力都打不对,你还想什么正解?? ...

  7. 使用C#winform编写渗透测试工具--暴力破解

    使用C#winform编写渗透测试工具--暴力破解 这篇文章主要介绍使用C#winform编写渗透测试工具--暴力破解.暴力破解是指通过利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式.简单来说就 ...

  8. CF877B Nikita and string TJ

    前言的前言 本 TJ 同步发布于洛谷,在线求赞(bushi 前言 蒟蒻第一篇题解,在线求审核大大给过 awa. 如果此题解有什么问题的话欢迎各位大巨佬提出. 题目链接:CF877B 题目类型:dp,一 ...

  9. Android 自定义属性(attrs)、样式(Style)、主题(Theme)

    Android 自定义属性(attrs).样式(Style).主题(Theme) https://www.cnblogs.com/dandre/p/4507024.html https://blog. ...

  10. I类HDACs是乳酸化修饰“eraser”

    赖氨酸酰化修饰 (lysine acylation) 是一种广泛存在的.进化上高度保守的蛋白质翻译后修饰 (post-translational modifications, PTMs) 类型,通过表 ...