TtlExecutorWrapperDemo.kt 1.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package com.alibaba.demo.ttl

import com.alibaba.ttl.TransmittableThreadLocal
import com.alibaba.ttl.threadpool.TtlExecutors
import java.util.concurrent.Callable
import java.util.concurrent.Executors

/**
 * @author Jerry Lee (oldratlee at gmail dot com)
 */
fun main() {
    val ttlExecutorService = Executors.newCachedThreadPool().let {
        // return TTL wrapper from normal ExecutorService
        TtlExecutors.getTtlExecutorService(it)
    }!!
oldratlee's avatar
oldratlee 已提交
16
    val context = TransmittableThreadLocal<String>()
17

oldratlee's avatar
oldratlee 已提交
18 19
    context.set("value-set-in-parent")
    println("[parent thread] set ${context.get()}")
20 21 22 23

    /////////////////////////////////////
    // Runnable
    /////////////////////////////////////
oldratlee's avatar
oldratlee 已提交
24
    val task = Runnable { println("[child thread] get ${context.get()} in Runnable") }
25 26 27 28 29 30
    ttlExecutorService.submit(task).get()

    /////////////////////////////////////
    // Callable
    /////////////////////////////////////
    val call = Callable {
oldratlee's avatar
oldratlee 已提交
31
        println("[child thread] get ${context.get()} in Callable")
32 33 34 35 36 37 38 39 40
        42
    }
    ttlExecutorService.submit(call).get()

    /////////////////////////////////////
    // cleanup
    /////////////////////////////////////
    ttlExecutorService.shutdown()
}