今天看多线程,看到ThreadLocal的使用,发现了自己对泛型理解还不深,写下了加深一下印象
在一个类中调用 ThreadLocal.set(System.currentTimeMillis()); 即将当前时间的毫秒数塞进ThreadLocal声明的变量里,然后TimeUnit.SECONDS.sleep(5) 使当前线程休眠5秒,然后 System.currentTimeMillis()-ThreadLocal.get(),但是这是会提示错误,ThreadLocal.get()返回的是Object类型的值。发现在new ThreadLocal对象的时候没有加泛型,如下:当声明ThreadLocal对象的时候加上泛型约束就不会报错,如下于是就在想为什么在声明的时候加一个<Long>后get方法返回的就是Long型了。遇到这类问题就点进ThreadLocal类去查看源码,果不其然,发现了其中的原因,如下:
原来ThreadLocal是一个泛型类,当new的时候使用Long型进行泛型约束其get()方法返回的就是对应的类型,所以就可以完成这个简单的计时器了。
版权声明:本文为qq_29669265原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。