Servlet网上售票问题引发线程安全问题的思考_JSP编程

先分享相关代码:

package com.lc.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 Ticketsell extends HttpServlet {

 public int ticket = 3;//假设只有三张票

 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
 PrintWriter out = response.getWriter();
 response.setContentType("text/html;charset=gbk");

 //简单点而处理售票问题
 //当一个变量需要多个用户共享,则应该在访问该变量的时候加 同步机制
 //如果一个变量不需要共享则直接在doGet()和doPost()方法中定义即可,这样的话就不存在线程的安全型问题

 synchronized (this) { //解决同步性问题的方法

  if(ticket > 0)
  {
  System.out.println("你买到票了!");
  out.println("你买到票了!");

  //休眠
  try {
   Thread.sleep(10*1000);
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  ticket--;
  }
  else
  {
  System.out.println("你没有买到票!");
  out.println("你没有买到票!");
  }
 }

 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

 this.doGet(request, response);

 }

}

运行结果如下:在不同的游览器中同时访问这个资源  在第三次之后显示 票没有了!

引发线程问题的思考,小编在之前的学习中也遇到过,现在线程问题有了一定的理解,希望大家也可以通过相关文章得到启发。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索servlet
线程
servlet线程安全吗、servlet 线程安全、servlet多线程、servlet单实例多线程、servlet是多线程的吗,以便于您获取更多的相关知识。

时间: 2024-08-31 10:20:56

Servlet网上售票问题引发线程安全问题的思考_JSP编程的相关文章

JSP使用Servlet作为控制器实现MVC模式实例详解_JSP编程

本文实例讲述了JSP使用Servlet作为控制器实现MVC模式的方法.分享给大家供大家参考.具体如下: 一.目标: ① 初步理解MVC模式: ② 掌握Servlet的编写: ③ 使用MVC模式完成登录功能. 二.主要内容: ① 分析JSP+JavaBean模式存在的问题,并介绍JSP+JavaBean+Servlet模式,以及和MVC模式的关系: ② 通过简单实例介绍Servlet的编写.配置和运行: ③ 采用Servlet完成登录功能的控制. 1. JSP+JavaBean这种模式存在的问题?

jsp和servlet操作mysql中文乱码问题的解决办法_JSP编程

首先看是从什么地方开始出现的乱码,只要统一编码,就不会出现乱码,下面以uft-8(个人认为最好)为例,详细说明: 1.如果乱码是从jsp页面出现的,jsp头部页面加上:<%@ page language="java" pageEncoding="UTF-8" %>在head标签中加上标签. 2.如果乱码是在servlet中出现的,则有两种方法:一种是在每个servlet中doget和doPost方法头部加上request.setCharacterEnco

servlet+JSP+mysql实现文件上传的方法_JSP编程

本文实例讲述了servlet+JSP+mysql实现文件上传的方法.分享给大家供大家参考,具体如下: 一.文件上传的基本操作: 1. 表单属性enctype的设置 multipart/form-data和application/x-www-form-urlencoded的区别 FORM元素的enctype属性指定了表单数据向服务器提交时所采用的编码类型,默认的缺省值是"application/x-www-form-urlencoded". 然而,在向服务器发送大量的文本.包含非ASCI

Servlet和JSP的线程安全问题

js|servlet|安全|问题 编写Servlet和JSP的时候,线程安全问题很容易被忽略,如果忽视了这个问题,你的程序就存在潜在的隐患. 1.Servlet的生命周期 Servlet的生命周期是由Web容器负责的,当客户端第一次请求Servlet时,容器负责初始化Servlet,也就是实例化这个Servlet类.以后这个实例就负责客户端的请求,一般不会再实例化其他Servlet类,也就是有多个线程在使用这个实例.Servlet之所以比CGI效率高就是因为Servlet是多线程的.如果该Ser

关于Struts2 Dispatcher分发器的线程安全问题

问题描述 查看Struts2StrutsPrepareAndExecuteFilter这个类可以看出在服务器进行初始化时,调用了这个类的init化方法dispatcher=init.initDispatcher(config)生成了一个Dipspacher实例.然后在doFilter方法中,通过prepare.assignDispatcherToThread()方法将dispacher对象put进当前线程的ThreadLocalMap中去,其中key是ThreadLocal对象,value是Di

JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题

一.Servlet映射匹配问题: 在第一篇文章中的第四段(MyEclipse及Tomcat的配置)已经讲到这个知识,现在再细化一下: 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成. <servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-n

struts1和struts2的线程安全问题

问题描述 我在struts2权威指南中看到介绍struts1与struts2的区别的时候说struts1是线程安全的.网上又有许多人说struts1是非线程安全的!我这个地方有底迷糊了,请高手来说一下,struts1和struts2到底是线程安全的还是非线程安全的,麻烦说下各位大虾是怎么分析的.谢谢 解决方案 解决方案二:Struts2的Action设计就不像Struts1的Action或者Servlet那样是单实例了.Struts2的Action的设计哲学是每次请求来了,都创建一个实例了.因此

Java-Servlet线程安全问题

问题描述 在看zwchen很久之前的一篇博客,地址如下http://zwchen.iteye.com/blog/91088做了个测试,按照第一种做法 为使用synchronized,并未出现 线程共享情况,(我使用的是tomcat6.0带的servlet包)数据都是 SimpleServlet@c4fe76 ==> Thread[http-8080-1,5,main]: Counter = 60Counter = 61Counter = 62Counter = 63Counter = 64Cou

Java日期类SimpleDateFormat时间格式化线程安全问题

SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题.下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类.     一.引子     我们都是优秀的程序员,我们都知道在程序中我们应当尽量