上QQ阅读APP看书,第一时间看更新
1.3 currentThread()方法
currentThread()方法可返回代码段正在被哪个线程调用的信息。下面通过一个示例进行说明。
创建t6项目,创建Run1.java类代码如下:
public class Run1 { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); } }
程序运行结果如图1-21所示。
图1-21 运行结果
结果说明,main方法被名为main的线程调用。
继续实验,创建MyThread.java类。代码如下:
public class MyThread extends Thread { public MyThread() { System.out.println("构造方法的打印:" + Thread.currentThread().getName()); } @Override public void run() { System.out.println("run方法的打印:" + Thread.currentThread().getName()); } }
运行类Run2.java代码如下:
public class Run2 { public static void main(String[] args) { MyThread mythread = new MyThread(); mythread.start(); // mythread.run(); } }
程序运行结果如图1-22所示。
图1-22 运行结果
从图1-22中的运行结果可以发现,MyThread.java类的构造函数是被main线程调用的,而run方法是被名称为Thread-0的线程调用的,run方法是自动调用的方法。
文件Run2.java代码更改如下:
public class Run2 { public static void main(String[] args) { MyThread mythread = new MyThread(); // mythread.start(); mythread.run(); } }
运行结果如图1-23所示。
图1-23 均被main主线程所调用
再来测试一个比较复杂的情况,创建测试用的项目currentThreadExt,创建Java文件CountOperate.java。代码如下:
package mythread; public class CountOperate extends Thread { public CountOperate() { System.out.println("CountOperate---begin"); System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName()); System.out.println("this.getName()=" + this.getName()); System.out.println("CountOperate---end"); } @Override public void run() { System.out.println("run---begin"); System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName()); System.out.println("this.getName()=" + this.getName()); System.out.println("run---end"); } }
创建Run.java文件,代码如下:
package test; import mythread.CountOperate; public class Run { public static void main(String[] args) { CountOperate c = new CountOperate(); Thread t1 = new Thread(c); t1.setName("A"); t1.start(); } }
程序运行结果如下:
CountOperate---begin Thread.currentThread().getName()=main this.getName()=Thread-0 CountOperate---end run---begin Thread.currentThread().getName()=A this.getName()=Thread-0 run---end