tocat 4.1中 HttpProcessor线程安全问题

来源:互联网 发布:java socket gui 实例 编辑:程序博客网 时间:2024/06/05 14:16
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(); }
}