线程间通信ThreadLocal

青旅半醒 2022-09-11 01:19 301阅读 0赞

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这 个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个 线程上的一个值。

可以通过set(T)方法来设置一个值,在当前线程下再通过get()方法获取到原先设置的值。

  1. package com.dongguo.sync;
  2. import java.util.concurrent.TimeUnit;
  3. /** * @author Dongguo * @date 2021/9/10 0010-15:00 * @description: */
  4. public class ThreadLocalDemo {
  5. private static final ThreadLocal<Long> TIME_THREADLOCAL = ThreadLocal.withInitial(() -> {
  6. return System.currentTimeMillis();
  7. });
  8. public static final void begin() {
  9. TIME_THREADLOCAL.set(System.currentTimeMillis());
  10. }
  11. public static final long end() {
  12. return System.currentTimeMillis() - TIME_THREADLOCAL.get();
  13. }
  14. public static void main(String[] args) {
  15. ThreadLocalDemo.begin();//开始时间
  16. try {
  17. TimeUnit.SECONDS.sleep(1);
  18. } catch (InterruptedException e) {
  19. e.printStackTrace();
  20. }
  21. System.out.println("Cost: " + ThreadLocalDemo.end() + " mills");
  22. }
  23. }
  24. 运行结果
  25. Cost: 1005 mills

ThreadLocalDemo类可以被复用在方法调用耗时统计的功能上,在方法的入口前执行begin()方法,在方法调用后执行end()方法,好处是两个方法的调用不用在一个方法或者类中,比如在AOP(面 向方面编程)中,可以在方法调用前的切入点执行begin()方法,而在方法调用后的切入点执行 end()方法,这样依旧可以获得方法的执行耗时。

发表评论

表情:
评论列表 (有 0 条评论,301人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线通信ThreadLocal

    ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这 个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal

    相关 线通信

    为什么需要线程通讯 线程是操作系统调度的最小单位,有自己的栈空间,可以按照既定的代码逐步的执行,但是如果每个线程间都孤立的运行,那就会造资源浪费。所以在现实中,我们需要这

    相关 线通信

    线程和线程之间不是独立的个体,它们彼此之间可以互相通信和协作。 线程通信就是在线程之间传递信息,保证他们能够协同工作。在线程间进行通信后,系统之间的交互性会更强大,在大大提高

    相关 线通信

    一、引言 线程与线程之间不是相互独立的存在,它们彼此之间需要相互通信和协作。最典型的例子就是生产者-消费者问题。下面首先介绍 wait/notify 机制,并对实现该机制

    相关 线通信

    注意: 必须在同步方法中使用wait和notify方法,因为执行wait和notify的前提条件是必须持有同步方法(或块)的monitor的所有权,否则将会抛出异常