美文网首页
Servlet(2)-多线程同步问题和ServletContex

Servlet(2)-多线程同步问题和ServletContex

作者: 残梦Tenderness | 来源:发表于2019-04-15 20:00 被阅读0次

Servlet多线程同步问题

     由于Servlet/JSP默认为是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程同步问题。
如果在编写Servlet/JSP程序时不注意到多线程同步问题,这往往造成编写的程序在少量用户访问时没有问题,而在并发用户上升到一定值时,就会经常出现一些莫名其妙的问题,对于这类随机性的问题调试难度也将会非常的大。
     可能会出现这种情况,在Servlet中创建了一个成员变量,一个线程对这个成员变量进行写操作,而另外一个线程对这个成员变量进行读操作。那我们拿到的数据就可能是不正确的。
     所以,不要在Servlet中创建成员变量!也不可能让Servlet在单线程环境下运行,也别去使用同步代码块,因为这样会导致服务器以极低的效率运行服务。

ServletContext

1、ServletContext概述

     当Servlet容器启动Web应用时,会为每一个Web应用创建唯一的ServletContext对象。我们可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。
     也就是说,我们可以通过ServletContext对象可以实现不同Servlet之间的数据传输。例如,我们在ServletDemo1中向ServletContext对象中存储了一个值,然后在ServletDemo2中得到这个值,这样我们就是通过ServletContext对象共享数据了。

2、ServletContext应用

(1)在使用ServletContext对象之前,我们需要知道如何拿到这个Web应用中唯一的数据共享容器,我们有两种方式:

  • ServletConfig中的getServletContext()方法;
  • GenericServlet中的getContext()方法;

(2)前面说的ServletContext对象是可以进行数据共享的,原因是在于ServletContext对象中存在一个Map集合,和我们平时使用的Map特性差不多,都会覆盖其中key相同的value值,以下是使用这个Map的方法:

  • void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性;
  • Object getAttribute(String name):用来获取ServletContext中的数据,当然,在获取之前需要先存储这个对象;
  • void removeAttribute(String name):用来移除ServletContext对象中的属性,如果内该属性不存在,那么这个方法不会做任何事情(不会报错);
  • Enumeration getAttributeNames():获取所有域属性的名称。

相关文章

  • Servlet(2)-多线程同步问题和ServletContex

    Servlet多线程同步问题 由于Servlet/JSP默认为是以多线程模式执行的,所以,在编写代码时需要非常细致...

  • JavaWeb-005-ServletContext详解

    ServletContext接口 Servlet引擎为每个WEB应用程序都创建一个对应的ServletContex...

  • OpenMP多线程——Parallel for

    多线程——线程同步 数据竞争问题 线程互斥同步——critical 线程互斥同步——atmoic 线程互斥同步——...

  • 多线程:6单例模式和多线程

    单例模式和多线程 1.立即加载 2.延迟加载 2.1 延迟加载不同步在多线程环境下的问题 2.2延迟加载的解决方案...

  • python系统编程3

    线程 1.同步概念 1.多线程开发可能遇到的问题 同步不是一起的意思,是协同步调 假设两个线程t1和t2都要对nu...

  • 异步Servlet 特性

    异步Servlet 本篇主要讲解 如何使用 异步Servlet的处理请求,并且演示 同步Servlet和异步Ser...

  • 多线程

    内存耗时问题 线程是进程的基本执行单元 多线程的优缺点 优点: 缺点: 多线程的作用: 多线程中同步和异步的概念 ...

  • synchronized

    讲synchronized关键字时候,就不得不提一下多线程问题同步问题 多线程的同步问题:多个线程同时修改一个数据...

  • Java自学-多线程 同步synchronized

    Java 多线程同步 synchronized 多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问...

  • UI数据源同步

    数据源同步问题多线程对共享数据的访问,需要考虑数据源的同步问题,如何解决tableView在多线程环境下的修改或者...

网友评论

      本文标题:Servlet(2)-多线程同步问题和ServletContex

      本文链接:https://www.haomeiwen.com/subject/tboywqtx.html