如何控制servlet中的线程同步
来源:互联网 发布:手机淘宝天天特价在哪 编辑:程序博客网 时间:2024/06/07 08:30
作者: 韩顺平
从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中的线程同步
- C#中的多线程-线程同步基础 (控制线程数量)
- C#中的多线程-线程同步基础 (控制线程数量)
- C#中的多线程-线程同步基础 (控制线程数量)
- 线程的同步控制
- 线程的同步控制
- 线程同步控制
- ruby线程同步控制
- 线程间同步控制
- ruby线程控制,线程同步
- Servlet及JSP中的多线程同步问题及servlet单线程模式
- Servlet线程同步实例研究
- LINUX 线程基础, 线程同步,线程控制
- 线程控制(线程同步 & 线程安全)
- 线程间的同步控制
- 线程的控制与同步
- 如何解决Java线程同步中的阻塞问题
- 如何线程的同步
- 一些鲜为人知的编程真相
- google搜索框代码
- 1、把二元查找树转变成排序的双向链表
- 国外程序员是如何准备面试的
- 一些鲜为人知的编程真相
- 如何控制servlet中的线程同步
- ZOJ2347 Squares (POJ2002 二分查找)
- 页面传值
- PHP导入excel数据到mysql
- Extjs 创建数据的几种方式
- 整理了部分js 类型转换
- php中echo的heredoc表示方法
- apache加载php5apache2.dll文件失败
- 基于BSD4.4的UDP通讯初探