老套路,先说作用,上源码
一、作用
Thread.currentThread是Thread的一个静态本地方法,本地方法就是可以调用其他语言,比如你可以调用你c++,c++再去调用你的Windows的执行程序等等。 先不用去纠结这个native本地方法是啥,不知道无所谓,不影响操作,先操作一通再说
这个方法,他返回一个当前正在运行的线程的实例对象,说白了,就是你当前正在运行的线程,你通过这个方法,就可以拿到她了,拿到你想要的线程之后,你就可以拿到她的电话号码、微信…(扯远了哈,反正就这么个意思)
二、源码
源码这个,暂时没啥好说的,他就是返回给你当前线程的实例对象而已
/**
* Returns a reference to the currently executing thread object.
*
* @return the currently executing thread.
*/
public static native Thread currentThread();
三、总结
这里经常看到有人拿它做些对比,也顺便理一理,写在这。
3.1 Thread.currentThread().sleep(x) 和Thread.sleep(x)区别
一般来说,用sleep,都是用的Thread.sleep(x),如果要用前者,也没有错,只不过IDE会提示你,小伙子,这样做不太好哟
Static member 'java.lang.Thread.sleep(long)' accessed via instance reference less... (Ctrl+F1)
Shows references to static methods and fields via class instance rather than a class itself.
就是说通过一个对象实例来调用它的静态方法,这是不太好的,咱们应该调用一个类的静态方法,而不是一个实例的静态方法,你平时写代码也没这么干过吧,那你定义这个静态来干嘛?好看?所以说,还是用前者吧,年轻人。
本质上来讲, 其实是没有区别的,其功效完全一样。不过呢, 一些代码检查工具会认为 前者有点问题。
While you can call a static method via an instance reference, it’s not good style ———— 这个就是代码检查工具提示判断的 依据。 不是一个好的 style。
3.2 Thread.currentThread()与this的区别
Thread.currentThread()==this一般情况下是成立的,但最好别这么想,这个得看具体代码。
为啥,因为,Thread的实例和普通对象一样,任何线程都可调用该实例的方法,如果是另外一个线程调用这个Thread的实例的方法,那就不会相等了。明显这个Thread.currentThread()就代表别的调用线程了,而不是被调用的这个线程了,Thread.currentThread()==this就不成立了。
一般来说,Thread.currentThread() 用于不方便使用this 的场合。 Thread.currentThread() 明确表明了它所针对的对象是 当前线程! 不是this! 当然,如果碰巧this 就是当前线程, 那也是没毛病的。
明白这两个实质代表的是啥就行,记住以下两点:
Thread.currentThread() 这个,拿到的始终是目前正在运行的线程
this,是那个实例,简单理解,就是这个this在哪个线程类代码里,这代表这个线程类的实例,这个不一定是当前正在运行的线程。(注意之前说的,其他线程调用这个线程的run方法,那么Thread.currentThread()就代表的是其他线程,因为是他在跑;this,就是这个线程,两者自然不相等啦)