ThredLocal的使用

ThredLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值得存储结构。

package cn.com.test;

import java.util.concurrent.TimeUnit;

public class Profiler {

	//第一次get()方法调用时会进行初始化(如果set方法没有调用),每个线程会调用一次
	private static final ThreadLocal<Long> TIME_THREADLOCAL = new ThreadLocal<Long>(){
		protected  Long initialValue(){
			return System.currentTimeMillis();
		}
		};
		
		public static final void begin() {
			TIME_THREADLOCAL.set(System.currentTimeMillis());
	}
		
		public static final long end(){
			return System.currentTimeMillis() - TIME_THREADLOCAL.get();
		}
		
		public static void main(String[] args) throws Exception {
			Profiler.begin();
			TimeUnit.SECONDS.sleep(10);
			System.out.println("cost:" + Profiler.end() + " mills");
		}
}

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

10个常见的 Java 错误及避免方法之第二集(后续持续发布)

当程序缺少关闭大括号(“}”)时,Java代码中就会发生此错误消息。 有时我们可以通过在代码的末尾放置大括号来快速修复错误。

983
来自专栏JavaQ

深入浅出JDK动态代理(二)

接上篇《深入浅出JDK动态代理(一)》 代理类解密 对于JDK动态代理,生成的代理类是什么样的?为什么调用代理类的任何方法时都一定会调用invoke方法?下面来...

3416
来自专栏乐百川的学习频道

Powershell快速入门(二) Shell编程

这一部分着重于介绍Powershell的程序知识,让我们能够编写功能强大的Powershell脚本,执行比较复杂的任务。 变量 变量使用$变量名创建和引用。举个...

35510
来自专栏JavaEdge

深入理解JDK动态代理机制

3336
来自专栏aCloudDeveloper

大神洗礼第二讲——内存对齐相关

Author:bakari       Date:2012.10.22 主要内容:内存对齐相关 1、 温故而知新:防御性编程的应用 防御性编程的详细讲解可见我的...

2248
来自专栏栗霖积跬步之旅

2.2synchronized同步语句块

使用synchronized虽然能够避免不同步的现象出现,但是也会出现弊端,比如代码执行时间过长,那么其他线程就必须等待该线程执行完毕释放锁之后才能拿到锁。 面...

25010
来自专栏blackheart的专栏

[C#1] 12-特性

1.特性简介 特性仅仅是为目标元素提供关联的附加信息的一种方式,编译器的工作只是将这些附加信息放到托管模块的元数据中, 大多特性对于编译器来说没有任何特殊的意义...

2188
来自专栏潇涧技术专栏

Python Basics

1.使用glob模块可以用通配符的方式搜索某个目录下的特定文件,返回结果是一个list

962
来自专栏xx_Cc的学习总结专栏

iOS底层原理总结 - 探寻block的本质(一)

2824
来自专栏学海无涯

5.逻辑分支

911

扫码关注云+社区

领取腾讯云代金券