Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
阿啄debugIT
transmittable-thread-local
提交
ab1b0603
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,发现更多精彩内容 >>
提交
ab1b0603
编写于
8月 29, 2018
作者:
oldratlee
🔥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add CowDemo
上级
cc34403a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
0 deletion
+56
-0
src/test/java/com/alibaba/demo/cow/CowDemo.kt
src/test/java/com/alibaba/demo/cow/CowDemo.kt
+56
-0
未找到文件。
src/test/java/com/alibaba/demo/cow/CowDemo.kt
0 → 100644
浏览文件 @
ab1b0603
package
com.alibaba.demo.cow
import
com.alibaba.expandThreadPool
import
com.alibaba.ttl.TransmittableThreadLocal
import
com.alibaba.ttl.threadpool.TtlExecutors
import
java.util.concurrent.Executors
import
java.util.concurrent.TimeUnit
fun
main
(
args
:
Array
<
String
>)
{
val
threadPool
=
Executors
.
newCachedThreadPool
().
let
{
expandThreadPool
(
it
)
TtlExecutors
.
getTtlExecutorService
(
it
)
}
!!
val
traceContext
=
object
:
TransmittableThreadLocal
<
Trace
>()
{
override
fun
initialValue
():
Trace
=
Trace
(
"init"
,
Span
(
"first"
,
0
))
override
fun
copy
(
parentValue
:
Trace
):
Trace
=
parentValue
.
copy
()
// shadow copy Trace, this is fast
override
fun
childValue
(
parentValue
:
Trace
):
Trace
=
parentValue
.
copy
()
// shadow copy Trace, this is fast
fun
increaseSpan
()
{
get
().
run
{
// COW the Span object in Trace
span
=
span
.
copy
(
id
=
"${span.id} + PONG"
,
counter
=
span
.
counter
+
1
)
}
}
override
fun
toString
():
String
{
return
"${get()}[${super.toString()}]"
}
}
fun
printTtlInfo
()
{
println
(
"${Thread.currentThread().name}: $traceContext"
)
}
printTtlInfo
()
threadPool
.
execute
{
printTtlInfo
()
traceContext
.
increaseSpan
()
printTtlInfo
()
threadPool
.
execute
{
printTtlInfo
()
traceContext
.
increaseSpan
()
printTtlInfo
()
}
}
Thread
.
sleep
(
100
)
threadPool
.
shutdown
()
threadPool
.
awaitTermination
(
1
,
TimeUnit
.
SECONDS
)
}
private
data class
Trace
(
var
name
:
String
,
var
span
:
Span
)
private
data class
Span
(
val
id
:
String
,
val
counter
:
Int
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录