提交 1d43e7f7 编写于 作者: oldratlee's avatar oldratlee 🔥

improve docs

上级 9d483ea7
......@@ -206,7 +206,7 @@ java -Xbootclasspath/a:transmittable-thread-local-2.0.0.jar \
com.alibaba.ttl.threadpool.agent.demo.AgentDemo
```
Run the script [`run-agent-demo.sh`](scritps/run-agent-demo.sh)
Run the script [`scritps/run-agent-demo.sh`](scritps/run-agent-demo.sh)
to start demo of "Use Java Agent to decorate thread pool implementation class".
# 🔌 Java API Docs
......
......@@ -191,11 +191,11 @@ String value = parent.get();
示例代码:
```java
// 框架代码
TransmittableThreadLocal<String> parent = new TransmittableThreadLocal<String>();
parent.set("value-set-in-parent");
// ## 1. 框架上层逻辑,后续流程框架调用业务 ##
TransmittableThreadLocal<String> context = new TransmittableThreadLocal<String>();
context.set("value-set-in-parent");
// 应用代码
// ## 2. 应用逻辑,后续流程业务调用框架下层逻辑 ##
ExecutorService executorService = Executors.newFixedThreadPool(3);
Runnable task = new Task("1");
......@@ -203,13 +203,12 @@ Callable call = new Call("2");
executorService.submit(task);
executorService.submit(call);
// =====================================================
// ## 3. 框架下层逻辑 ##
// Task或是Call中可以读取,值是"value-set-in-parent"
String value = parent.get();
String value = context.get();
```
Demo参见[`AgentDemo.java`](src/test/java/com/alibaba/demo/agent/AgentDemo.java)
Demo参见[`AgentDemo.java`](src/test/java/com/alibaba/demo/agent/AgentDemo.java)执行工程下的脚本[`scritps/run-agent-demo.sh`](scritps/run-agent-demo.sh)即可运行Demo。
目前`Agent`中,修饰了`JDK`中的两个线程池实现类(实现代码在[`TtlTransformer.java`](src/main/java/com/alibaba/ttl/threadpool/agent/TtlTransformer.java)):
......@@ -234,8 +233,6 @@ java -Xbootclasspath/a:transmittable-thread-local-2.0.0.jar \
com.alibaba.ttl.threadpool.agent.demo.AgentDemo
```
有Demo演示『使用`Java Agent`来修饰线程池实现类』,执行工程下的脚本[`run-agent-demo.sh`](scritps/run-agent-demo.sh)即可运行Demo。
#### `Java Agent`的使用方式在什么情况下`TTL`会失效
由于`Runnable``Callable`的修饰代码,是在线程池类中插入的。下面的情况会让插入的代码被绕过,传递会失效。
......
......@@ -100,7 +100,7 @@ String result = runSupplierWithCaptured(captured, () -> {
## `Java Agent`方式对应用代码无侵入
相对修饰`Runnable`或是线程池的方式,`Java Agent`方式为什么是应用代码无侵入的?
[User Guide - 2.3 使用`Java Agent`来修饰`JDK`线程池实现类](../README.md#23-%E4%BD%BF%E7%94%A8java-agent%E6%9D%A5%E4%BF%AE%E9%A5%B0jdk%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%AE%9E%E7%8E%B0%E7%B1%BB) 说到了,相对修饰`Runnable`或是线程池的方式,`Java Agent`方式是对应用代码无侵入的。下面做一些展开说明。
<img src="scenario-framework-sdk-arch.png" alt="构架图" width="260" />
......@@ -173,7 +173,7 @@ public final class YourXxxAgent {
可以通过`repackage`(重新命名包名)来解决这个问题。
`Maven`提供了[Shade](http://maven.apache.org/plugins/maven-shade-plugin/)插件,可以完成`repackage`操作,并把`Javassist`的类加到`TTL``Jar`中。
`Maven`提供了[`Shade`插件](http://maven.apache.org/plugins/maven-shade-plugin/),可以完成`repackage`操作,并把`Javassist`的类加到`TTL``Jar`中。
这样就不需要依赖外部的`Javassist`依赖,也规避了依赖冲突的问题。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册