标签:函数 [] 这一 cut 区别 current extend thread 位置
Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可以知道,Thread类中的静态方法所操作的线程是“正在执行该静态方法的线程”,不一定是其所在位置的线程。为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作。下面来看一下Thread类中的静态方法:
1、currentThread()
currentThread()方法返回的是对当前正在执行的线程对象的引用。(Returns a reference to the currently executing thread object.)
举例:
public class Thread01 extends Thread{ static{ System.out.println("静态代码块的打印:" + Thread.currentThread().getName()); } public Thread01(){ System.out.println("构造函数的打印:" +Thread.currentThread().getName()); } @Override public void run() { System.out.println("run方法的打印:" + Thread.currentThread().getName()); } }
public class Test { public static void main(String[] args){ Thread01 thread01 = new Thread01(); thread01.start(); } }
结果:
静态代码块的打印:main
构造函数的打印:main
run方法的打印:Thread-0
可以看到,Thread01类中的三个相同的静态方法Thread.currentThread()所操作的不是同一个线程,虽然写在了Thread01内,但是静态代码块和构造函数中的静态方法是随着main线程而被调用的,run方法中的静态方法则是thread01线程调用的。把thread01.start()注释掉
public class Test { public static void main(String[] args){ Thread01 thread01 = new Thread01(); // thread01.start(); } }
结果:
静态代码块的打印:main
构造函数的打印:main
因为Thread01中的静态代码块和构造方法都是在main线程中被调用的,而run方法是thread01这个线程调用的,所以不一样。
举例说明上篇说的"this.XXX()"和"Thread.currentThread().XXX()"的区别,this表示的线程是线程实例本身,后一种表示的线程是正在执行"Thread.currentThread.XXX()这块代码的线程"
public class Thread01 extends Thread{ public Thread01(){ System.out.println("构造函数中通过this调用:" + this.getName()); System.out.println("构造函数中通过静态方法调用:" + Thread.currentThread().getName()); } @Override public void run() { System.out.println("run方法中通过this调用:" + this.getName()); System.out.println("run方法中通过静态方法调用:" + Thread.currentThread().getName()); } }
public class Test { public static void main(String[] args){ Thread01 thread01 = new Thread01(); thread01.start(); } }
结果:
构造函数中通过this调用:Thread-0 构造函数中通过静态方法调用:main run方法中通过this调用:Thread-0 run方法中通过静态方法调用:Thread-0
同样的,把thread01.start()这一行注释掉以后
public class Test { public static void main(String[] args){ Thread01 thread01 = new Thread01(); // thread01.start(); } }
结果:
构造函数中通过this调用:Thread-0
构造函数中通过静态方法调用:main
所以,在Thread01里面通过Thread.currentThread得到的线程对象的引用不一定就是Thread01。
2、
标签:函数 [] 这一 cut 区别 current extend thread 位置
原文地址:https://www.cnblogs.com/zfyang2429/p/10520111.html