1. connector 接受 socket请求,会在维护的processor pool中创建或返回一个processor。 初始时processor的 socket available= false await 方法睡眠。当connector thread调用processor的assign方法时,初始socket唤醒等待此processor instance 锁的进程,available= true .
2. processor thread wake up 开始处理socket parse request, parse header, populate request header response。
存在疑惑:代继续深入研究
正常情况 processor处理后请求回收到pool中应该已经做了回收处理。 connector从Pool中取 processor,connector thread应该不需要睡眠。
(当前的分析:当connector再调用到之前的processor时,如果socket还没被处理即available=true则睡眠。 目前理解算是一次保障措施吧)
总结:
1. Object.wait和Object.notify, Object.notifyAll 是对已经掌控的锁的操作,在调用时必须在synchronized{}块中调用。
2. wait方法释放锁并本线程放弃cpu时间进入等待队列。(本线程指包含wait方法的线程,或者包含wait方法的方法所在的线程。 Object只代表了锁对象)
3. notify是随机唤醒等待object锁的进程,执行notify并不是立刻就释放锁对象,而是在synchronized{}块结束后。
4. wait和sleep的区别 waitcpu控制权,同时主动释放锁。 而sleep方法不释放锁。
参考资料:
博客:http://blog.csdn.net/zyplus/article/details/6672775
书:how tomcat works