public class 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会回收, 但不频繁, 适用于短时间引用
| 限定符和类型 | 类和说明 |
|---|---|
static class |
SttlThreadPool.Companion |
| 限定符和类型 | 字段和说明 |
|---|---|
static SttlThreadPool.Companion |
Companion |
| 构造器和说明 |
|---|
SttlThreadPool(java.util.concurrent.ExecutorService pool)
可传递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会回收, 但不频繁, 适用于短时间引用 |
| 限定符和类型 | 方法和说明 |
|---|---|
boolean |
awaitTermination(long p0,
java.util.concurrent.TimeUnit p1) |
void |
execute(java.lang.Runnable command)
改写 execute() 方法
在执行之前传递一下 ScopedTransferableThreadLocal对象, 在执行后就恢复一下 ScopedTransferableThreadLocal对象
|
java.util.concurrent.ExecutorService |
getPool() |
<T> java.util.List<java.util.concurrent.Future> |
invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0) |
<T> java.util.List<java.util.concurrent.Future> |
invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0,
long p1,
java.util.concurrent.TimeUnit p2) |
<T> T |
invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0) |
<T> T |
invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0,
long p1,
java.util.concurrent.TimeUnit p2) |
boolean |
isShutdown() |
boolean |
isTerminated() |
void |
shutdown() |
java.util.List<java.lang.Runnable> |
shutdownNow() |
java.util.concurrent.Future<?> |
submit(java.lang.Runnable p0) |
<T> java.util.concurrent.Future<T> |
submit(java.lang.Runnable p0,
T p1) |
<T> java.util.concurrent.Future<T> |
submit(java.util.concurrent.Callable<T> p0) |
public static SttlThreadPool.Companion Companion
public SttlThreadPool(java.util.concurrent.ExecutorService pool)
可传递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会回收, 但不频繁, 适用于短时间引用
public void execute(java.lang.Runnable command)
改写 execute() 方法 在执行之前传递一下 ScopedTransferableThreadLocal对象, 在执行后就恢复一下 ScopedTransferableThreadLocal对象
public java.util.concurrent.ExecutorService getPool()
public boolean awaitTermination(long p0,
java.util.concurrent.TimeUnit p1)
public <T> java.util.List<java.util.concurrent.Future> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0)
public <T> java.util.List<java.util.concurrent.Future> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0,
long p1,
java.util.concurrent.TimeUnit p2)
public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0)
public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>> p0,
long p1,
java.util.concurrent.TimeUnit p2)
public boolean isShutdown()
public boolean isTerminated()
public void shutdown()
public java.util.List<java.lang.Runnable> shutdownNow()
public java.util.concurrent.Future<?> submit(java.lang.Runnable p0)
public <T> java.util.concurrent.Future<T> submit(java.lang.Runnable p0,
T p1)
public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T> p0)