公众号:知识浅谈

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请求处理

  1. 浏览器发送url给后端默认端口为80,被在端口处监听的Connector捕获。
  2. Connector把捕获的请求交给它所在的Service的Engine来处理,并等待来自Engine的回应。
  3. Engine获得请求的url,匹配他所拥有的所有虚拟机Host。
  4. Host匹配到路径前缀相同的Context(如果匹配不到,就该把请求缴费路径名为""的Context去处理)
  5. Context获得请求url,在它的mapping table中寻找对应的servlet
  6. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
  7. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用Servlet的doGet或doPost方法
  8. Context把执行完了之后的HttpServletResponse对象返回给Host
  9. Host把HttpServletResponse对象返回给Engine
  10. Engine把HttpServletResponse对象返回给Connector
  11. Connector把HttpServletResponse对象返回给客户浏览器

图片按我自己理解来的,仅作参考,和上边的序号不对应

分类:

后端

标签:

后端

作者介绍

公众号:知识浅谈
V1

公众号:知识浅谈