Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿啄debugIT
transmittable-thread-local
提交
1d43e7f7
T
transmittable-thread-local
项目概览
阿啄debugIT
/
transmittable-thread-local
与 Fork 源项目一致
从无法访问的项目Fork
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
transmittable-thread-local
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1d43e7f7
编写于
6月 20, 2018
作者:
oldratlee
🔥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
improve docs
上级
9d483ea7
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
10 addition
and
13 deletion
+10
-13
README-EN.md
README-EN.md
+1
-1
README.md
README.md
+7
-10
docs/developer-guide.md
docs/developer-guide.md
+2
-2
未找到文件。
README-EN.md
浏览文件 @
1d43e7f7
...
...
@@ -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
...
...
README.md
浏览文件 @
1d43e7f7
...
...
@@ -191,11 +191,11 @@ String value = parent.get();
示例代码:
```
java
//
框架代码
TransmittableThreadLocal
<
String
>
paren
t
=
new
TransmittableThreadLocal
<
String
>();
paren
t
.
set
(
"value-set-in-parent"
);
//
## 1. 框架上层逻辑,后续流程框架调用业务 ##
TransmittableThreadLocal
<
String
>
contex
t
=
new
TransmittableThreadLocal
<
String
>();
contex
t
.
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
=
paren
t
.
get
();
String
value
=
contex
t
.
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`
的修饰代码,是在线程池类中插入的。下面的情况会让插入的代码被绕过,传递会失效。
...
...
docs/developer-guide.md
浏览文件 @
1d43e7f7
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录