`
o_o_0
  • 浏览: 16286 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

如何控制servlet中的线程同步

 
阅读更多


作者: 韩顺平

从servlet的生命周期中,我们知道,当第一次访问某个servlet后,该servlet的实例就会常驻

内存,以后再次访问该servlet就会访问同一个servlet实例,这样就带来多个用户去访问一个

servlet的同步问题.

比如: 我们在ServletContext中记录在线人员信息。这样就可能造成同时访问ServletContext的

问题,如何解决,我做了一个小案例,很能说明问题,代码如下:

public void doGet(HttpServletRequest req,HttpServletResponse res){

try {

synchronized(this){
ServletContext sc=this.getServletContext();
sc.setAttribute("test",new Integer(nums));
}

}
catch (Exception ex) {

ex.printStackTrace();
}
}

//在需要同步的代码块中,加入synchronized(this){ //需要同步的代码 } ,就可以了。

那么为什么这样作就可以达到同步了,这是因为每个java对象都有且只有一个同步锁,在任何时候

,最多允许一个线程拥有这把锁,当某个线程试图执行带有synchronized(this){ //需要同步的代码 }

代码时,该线程必须得到this关键字对应的Servlet对象的锁,当没有被其它线程占用,那这个线程就可以

获得这把锁,并执行synchronized(this){ //需要同步的代码 } 的代码, 如果该锁被别的线程使用,java虚拟机就会把这个线程放到servlet对象的锁池,该线程也就进入了阻塞状态,同时进入等待队列,直到获得该对象的锁,才开始运行。当然,也可能超时而放弃操作synchronized(this){ //需要同步的代码 }

分享到:
评论

相关推荐

    Servlet线程同步计数器实验

    配套本人博文,Servlet线程同步实例研究

    servlet与Struts action线程安全问题分析(pdf)

    线程安全问题主要是由实例变量造成的,因此在Servlet中应避免使用实例变量。如果应用程序设计无法避免使用实例变量,那么使用同步来保护要使用的实例变量,但为保证系统的最佳性能,应该同步可用性最小的代码路径。...

    应用sevlet和线程同步实现定时

    应用sevlet和线程同步实现定时!应用sevlet和线程同步实现定时!应用sevlet和线程同步实现定时!

    JSP和Servlet面试题

    线程安全就是多线程操作同一个对象不会有问题,线程同步一般来保护线程安全, 所以可以在Servlet的线程里面加上同步方法或同步块。 (Synchronized)可以保证在同一时间只有一个线程访问,(使用同步块会导致性能...

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

    Tomcat怎么实现异步Servlet

    对于这种情况servlet规范中定义了异步处理方式,由于Servlet中等待阻塞会导致Web容器整体的处理能力低下,所以对于比较耗时的操作可以放置到另外一个线程中进行处理,此过程保留连接的请求和响应对象,在处理完成...

    Servlet3.1规范(最终版) PDF

    Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 ...

    2023Java高频面试题

    多线程编程:线程的基本概念、线程同步、线程安全、死锁等问题。 JDBC:Java与数据库的交互,连接池的使用等。 Spring框架:Spring框架的基础概念、IOC容器、AOP等。 Hibernate框架:Hibernate框架的基础概念、ORM...

    Java并发编程(学习笔记).xmind

    (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置交互 (3)简化异步事件的处理:服务器应用程序在接受...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    多线程并发访问,同步控制 线程间通信,等待/通知机制 锁锁机制,API详解 Fork/Join 框架机制详解 Executor线程池框架简介 面向对象 泛型机制与反射原理 Proxy动态代理机制详解 从整体上观察对象 网络开发 Servlet...

    100家大公司java笔试题汇总.docx

    3. Java中的线程可以通过等待和唤醒机制来实现同步。 九、其他 1. Java中的设计模式是指一些可以重复使用的解决方案,它们可以帮助开发者编写更加可维护、可扩展的代码。 2. Java中的MVC模式是指模型-视图-控制器...

    JAVA编程百例(照着例子更容易!)

    实例65 线程同步 实例66 线程控制 实例67 线程优先级 实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例7 接口和抽象类 实例70 使用JDOM解析XML 实例71 使用JDOM操作XML 实例72 欢迎进入APPLET世界 实例73 传递参数...

    Java清华教程.rar

     ■ 多线程程序设计,进程和线程的联系和区别,多线程程序设计的一般方法,线程的生命周期,线程状态的控制,多线程的互斥和同步;  ■ Java语言的网络编程技术和应用,Socket程序设计,Client/Server程序设计; ...

    清华大学java教程

     ■ 多线程程序设计,进程和线程的联系和区别,多线程程序设计的一般方法,线程的生命周期,线程状态的控制,多线程的互斥和同步;  ■ Java语言的网络编程技术和应用,Socket程序设计,Client/Server程序设计; ...

    JAVA清华教程 详细

     ■ 多线程程序设计,进程和线程的联系和区别,多线程程序设计的一般方法,线程的生命周期,线程状态的控制,多线程的互斥和同步;  ■ Java语言的网络编程技术和应用,Socket程序设计,Client/Server程序设计; ...

    [清华大学]JAVA教程

     ■ 多线程程序设计,进程和线程的联系和区别,多线程程序设计的一般方法,线程的生命周期,线程状态的控制,多线程的互斥和同步;  ■ Java语言的网络编程技术和应用,Socket程序设计,Client/Server程序设计; ...

    JAVA笔记(根据马士兵的java视频整理).pdf

    * JAVA中的多线程编程,包括Thread、Runnable、线程同步、线程通信等 网络编程 * JAVA中的网络编程,包括Socket、ServerSocket、TCP/IP、UDP等 数据库编程 * JAVA中的数据库编程,包括JDBC、SQL、数据库设计等 ...

    《Java编程技巧典型案例解析》随书光盘

    实例13 基于Java语言的多线程同步机制 实例14 Java程序中的多线程实现 实例15 利用Java的多线程技术实现并行多任务的管理 实例16 在Win32系统中引导Java程序 实例17 利用Java实现一个非线性规划问题 实例...

    JAVA-SSH面试题

    Action资源必须是线程安全的或同步的。 struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。 c、Servlet依赖 struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和...

    软通动力面试题集

    本总结涵盖了 Struts 框架的运行机制、集合框架中的常用集合、遍历 Map 的方法、字符串相加的区别、垃圾回收机制原理和多线程实现等知识点。 Struts 框架的运行机制 Struts 框架的运行机制主要包括以下步骤: 1. ...

Global site tag (gtag.js) - Google Analytics