TTL篇-TtlAgent的使用

接上篇,TTL篇-TTL的使用-CSDN博客

TtlAgent是什么

ttl使用的典型代码是如下所示,

@Data
    @AllArgsConstructor
    public static class Bean {
        private String name;
    }

    @Test
    public void testBean() throws InterruptedException {
        TransmittableThreadLocal<Bean> transmittableThreadLocal = new TransmittableThreadLocal<>();
        transmittableThreadLocal.set(new Bean("a"));
        ExecutorService executorService = Executors.newFixedThreadPool(2);

        TtlExecutors.getTtlExecutor(executorService).execute(() -> {
            System.out.println("初始拷贝:" + transmittableThreadLocal.get());
            Bean bean = transmittableThreadLocal.get();
            bean.setName("a1");
        });


        Thread.sleep(1000);
        TtlExecutors.getTtlExecutor(executorService).execute(() -> System.out.println("初始拷贝:" + transmittableThreadLocal.get()));

    }

为了使用TransmittableThreadLocal,需要配合TtlExecutors和TtlRunnable。所以在生成上使用的话多有不变,能不能有一个方法对于默认的java线程池进行增强,使得对于普通java线程池,提交的任务,默认使用的TtlRunnable;

官方提供了解决方案,TtlAgent。

TtlAgent的使用效果

如下代码,因为,使用默认的线程池,提交的任务,就会变成TTlRunanle任务,所以打印正常打印出a;

public class TtlAgentTest {
    public static void main(String[] args) {
        TransmittableThreadLocal<String> transmittableThreadLocal = new TransmittableThreadLocal<>();
        transmittableThreadLocal.set("a");

        ThreadPoolExecutor threadPoolExecutor = new
                ThreadPoolExecutor(1, 10, 1000, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(100));

        AtomicInteger a = new AtomicInteger();
        threadPoolExecutor.execute(() -> {
            System.out.println(transmittableThreadLocal.get());
        });
    }
}

怎么使用TtlAgent

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>transmittable-thread-local</artifactId>
    <version>2.2.0</version>
</dependency>

需要指定java启动参数,

-javaagent:D:\maven_jar\com\alibaba\transmittable-thread-local\2.2.0\transmittable-thread-local-2.2.0.jar -Xbootclasspath/a:D:\maven_jar\com\alibaba\transmittable-thread-local\2.2.0\transmittable-thread-local-2.2.0.jar

然后就可以正常跑TtlAgentTest 用例了。

参数详解:

-javaagent:这个是指定javaAgent代理的jar包

-Xbootclasspath:因为修饰了JDK标准库的类ThreadPoolExecutor,标准库由bootstrap class loader加载;修饰后的JDK类引用了TTL的代码,所以Java Agent使用方式下TTL Jar文件需要配置到boot class path上。

实现原理:

可以通过debug看到,增强的代码实现,$1 = com.alibaba.ttl.TtlRunnable.get($1, false, true);

结论

  1. 通过使用TtlAgent,可以增强ThreadPoolExecutor线程池,默认提交的任务,会被
    TtlRunnable get(),转换TTtlRunnable任务;
  2. 对于javaAgent需要增强jdk类库的代码,需要使用-Xbootclasspath,让agent的代码bootstrapClassLoader加载,否则默认的类加载器是systemClassLoader/appClassLoader。
  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: TTL-90S是一款常用的测距仪(测距范围为0.03米至40米)产品,下面我来为大家简要介绍一下如何使用该测距仪。 首先,放置测距仪:将TTL-90S放置在一个平整的表面上,确保它稳定且没有晃动。 然后,开启测距仪:按下电源开关,在屏幕上可以看到亮度调节选项。通过转动亮度调节选项来设置屏幕的亮度,以适应不同的环境。 接下来,选择测量模式:通过按下“模式”按钮,可以在测距、面积和体积之间进行选择。在测距模式下,您只需对准目标点,并按下测量按钮即可进行测距。 测量结果显示:测量结果会直接显示在屏幕上,并可以通过单击“单位”按钮进行单位切换(例如米、英尺等)。 此外,TTL-90S还提供了多功能选项,如连续测量和最大/最小测量。在连续测量模式下,测距仪可以连续测量多个点的距离。而在最大/最小测量模式下,它会自动记录并显示最大或最小距离。 最后,关机:长按电源开关即可关闭测距仪。 总之,TTL-90S是一款操作简便、功能强大的测距仪。无论是在家庭装修、建筑施工还是户外测量,它都可以提供准确的测量结果,并帮助您更高效地完成任务。希望以上说明可以帮助您更好地使用TTL-90S测距仪。 ### 回答2: TTL-90s是一款广泛使用的计时器,下面是其使用说明书: 1. 产品介绍:TTL-90s是一款数字计时器,用于测量和显示时间。它具有清晰的数字显示屏和简单易用的按钮操作。 2. 功能设置:通过按下功能按钮,可以设置计时器的各项功能。例如,通过按下"MODE"按钮可以选择计时模式、倒计时模式或秒表模式。通过按下"+/-"按钮可以设置计时器的时间、倒计时的时间或者秒表的初始时间。 3. 计时模式:在计时模式下,TTL-90s会实时显示经过的时间。按下"START/STOP"按钮开始计时,再次按下该按钮则停止计时。计时器可以最多记录99小时59分钟59秒。 4. 倒计时模式:在倒计时模式下,TTL-90s会倒计时显示剩余时间。按下"+/-"按钮设置倒计时时间,再按下"START/STOP"按钮开始倒计时。当倒计时结束时,计时器会发出响铃提示。 5. 秒表模式:在秒表模式下,TTL-90s可以用于测量一段时间的经过。按下"START/STOP"按钮开始计时,再次按下该按钮则停止计时。按下"RESET"按钮可以将秒表时间重置为0。 6. 其他功能:TTL-90s还具有存储和回放功能。按下"STORE"按钮可以将当前时间记录下来,按下"RECALL"按钮可以回放存储的时间。 7. 电源和维护:TTL-90s使用电池作为电源,可以持续使用较长时间。当电池电量不足时,屏幕上会显示电池低电量指示。更换电池时,请务必先关掉计时器。 以上是对TTL-90s计时器的简要使用说明。使用者可以根据需要选择合适的模式和设置,以满足各种计时需求。希望这份说明书能够帮助用户正确使用该计时器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值