公众号:知识浅谈
V1
2022/06/17阅读:9主题:全栈蓝
异步时父子线程间的传递问题
异步时父子线程间的传递问题
ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的ThreadLocal本地变量。
我们发现InheritableThreadLocal中createMap,以及getMap方法处理的对象不一样了,其中在ThreadLocal中处理的是threadLocals,而InheritableThreadLocal中的是inheritableThreadLocals。
createMap代码如下:
void createMap(Thread t, T firstValue) {
t.inheritableThreadLocals = new ThreadLocalMap(this, firstValue);
}
代码的意思是在Thread先获取父亲线程parent(即要创建子线程的当前这个线程)。当父亲线程中对inherThreadLocals进行了赋值,就会把当前线程的本地变量(也就是父线程的inherThreadLocals)进行createInheritedMap方法操作。查看源码createInheritedMap方法,源码可知此操作就是将赋线程的threadLocalMap传递给子线程。
Tomcat的http请求处理
-
浏览器发送url给后端默认端口为80,被在端口处监听的Connector捕获。 -
Connector把捕获的请求交给它所在的Service的Engine来处理,并等待来自Engine的回应。 -
Engine获得请求的url,匹配他所拥有的所有虚拟机Host。 -
Host匹配到路径前缀相同的Context(如果匹配不到,就该把请求缴费路径名为""的Context去处理) -
Context获得请求url,在它的mapping table中寻找对应的servlet -
Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类 -
构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用Servlet的doGet或doPost方法 -
Context把执行完了之后的HttpServletResponse对象返回给Host -
Host把HttpServletResponse对象返回给Engine -
Engine把HttpServletResponse对象返回给Connector -
Connector把HttpServletResponse对象返回给客户浏览器
图片按我自己理解来的,仅作参考,和上边的序号不对应
作者介绍
公众号:知识浅谈
V1
公众号:知识浅谈