设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
servlet是如何实现单实例多线程的? 是由web容器建立的线 ...
返回列表
发新帖
servlet是如何实现单实例多线程的? 是由web容器建立的线程还是servlet自己建立的.很混,求高人指点.
[复制链接]
11
|
1
|
2011-3-27 11:48:40
|
显示全部楼层
|
阅读模式
回复
使用道具
举报
千问
|
2011-3-27 11:48:40
|
显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">WEB容器标记一下 再回来
synchronized (a){你的这个a是不是在servlet开始定义的一个INTEGER成员变量吧?
你这个刷新两页面过程如下:假设a=0,当你刷新第一个时,产生线程1,此线程一直执行到synchronized (a){a;c=a;这个地方,然后线程1休息4秒,此时类成员变量a=1,方法变量c=a=1,而在4秒中未休息完时,你刷新第2个页面,又启动另一个线程2,此线程一直执行到synchronized 前面停止,一直等待上线程1弃锁,线程1在4秒后休息完毕,弃锁,然后线程2得到锁:线程2开始执行a;c=a,然后也休息4秒,此时:SERVLET单实例的a值为a=2,方法变量c=a=2;于此同时线程1继续往下执行B=A=2,所以最终结果第一个界面c为1,而第二个页面c=2
我说的可能不太清楚,你只要记住:多线程共享的变量是类成员变量a,线程之间争夺的锁也是对象的锁,而不是一个代码块,你这个例子里面 b、c是方法里面的局部变量,线程之间是安全的,故你只要追踪a的值得变化规律就行。
高深点可以研究一下他们说的工作存储块和资源内存块,貌似不是叫这个名字,忘光啦哈哈。保护明白在HI我吧
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行