| 类 | 说明 |
|---|---|
| AllRequestScopedTransferableThreadLocal<T> | |
| HttpRequestScopedTransferableThreadLocal<T> | |
| IRequestScopedTransferableThreadLocal<T> |
请求域的可传递的 ThreadLocal
1 在对应的请求域中有效
2 对应的请求处理器, 承诺在请求处理前后调用其 beginScope()/endScope(), 通过作为请求域的子作用域来自动处理
|
| JkThreadLocal<T> |
ThreadLocal扩展
|
| RpcRequestScopedTransferableThreadLocal<T> | |
| ScopedTransferableThreadLocal<T> |
有作用域的可传递的 ThreadLocal
|
| SttlCurrentHolder<T> |
当前持有者
只是简单包装 ThreadLocal, 方便放到伴随对象中调用, 暴露简单明了的api
|
| SttlInterceptor |
可传递ScopedTransferableThreadLocal的拦截器, 只传递ScopedTransferableThreadLocal, 无关ThreadLocal
特性: worker thread 在执行任务时, 会传递 caller thread的 ScopedTransferableThreadLocal数据
目标: 主要是为了解决异步执行时, 线程状态(ScopedTransferableThreadLocal)的传递问题, 如 jkmvc 将当前 Db/HttpRequest 等对象都是记录到 ScopedTransferableThreadLocal对象中, 以方便访问, 但是一旦异步执行后就丢失了
实现: 在执行之前传递一下 ScopedTransferableThreadLocal对象, 在执行后就恢复一下 ScopedTransferableThreadLocal对象
优化: 所有 intercept()方法的 caller thread 的 ScopedTransferableThreadLocal对象引用都是使用
ScopedTransferableThreadLocal.weakCopyLocal2Value(), 为 WeakHashMap, GC会回收, 但不频繁, 适用于短时间引用 |
| SttlThreadPool |
可传递ScopedTransferableThreadLocal的线程池, 只传递ScopedTransferableThreadLocal, 无关ThreadLocal
特性: worker thread 在执行任务时, 会传递 caller thread的 ScopedTransferableThreadLocal数据
目标: 主要是为了解决异步执行时, 线程状态(ScopedTransferableThreadLocal)的传递问题, 如 jkmvc 将当前 Db/HttpRequest 等对象都是记录到 ScopedTransferableThreadLocal对象中, 以方便访问, 但是一旦异步执行后就丢失了
实现: 改写 execute() 方法, 在执行之前传递一下 ScopedTransferableThreadLocal对象, 在执行后就恢复一下 ScopedTransferableThreadLocal对象
优化: 所有 SttlInterceptor.intercept()方法的 caller thread 的 ScopedTransferableThreadLocal对象引用都是使用
ScopedTransferableThreadLocal.weakCopyLocal2Value(), 为 WeakHashMap, GC会回收, 但不频繁, 适用于短时间引用 |
| SttlValue |
值, 有作用域的可传递的 ThreadLocal 中的值
ScopedTransferableThreadLocal.endScope() 可能随时随地调用, 也就是说 SttlValue 随时可能被删除, 但可能某个线程调用了 SttlInterceptor.intercept(回调), 但此时回调还没触发, 也就是旧的 ScopedTransferableThreadLocal 对象还未恢复, 等恢复后引用的 SttlValue 却应该被删掉, 因此添加 deleted 属性来做是否已删除的判断
|