您的位置:首页 > 理论基础 > 计算机网络

tocat 4.1中 HttpProcessor线程安全问题

2012-08-09 09:35 323 查看
1.将HttpProcessor 放入vector中,每次取子来一个处理请求,如果请求超过最大连接数,则直接socket.close();断开连接,tomcat4.x 不能实现连接的等待,因为processor一次只能

处理一个请求,如果两个请求同时使用同一个proccessor的话,HttpProcessor 是通过下面的方法来处理的

1.processor.assign(socket);将 socket 交给处理线程,processor中有一个socket实例域,用来保存添加进来的socket

2.for(;;){
循环等待socket,如果this.socket中有数据,则取出,进行处理,如果没有,则等待

Socket socket = await();

processor(socket);

}

processor 的多线程主要有两个方面组成,boolean avaliable,this.socket,还有就是锁

avaliable 标记 this.socket是否为空,如果为空,则可以向this.socket赋值,否则,则

要等待将上一个socket 处理完成,才可以向里面赋值,

assign:

void assign(){
Socket await(){

synchronized(lock){
synchronized(lock){

while(avalible){

while(!avaliable)
lock.wait();

lock.wait();
avalible = true;

notifyall();

this.socket = socket;
return this.socket;

vailable = false;
}

notifyall();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: