Java curentThread()方法的作用

curentThread() 方法可返回代码段正在被哪个线程调用的信息。下面通过一个示例进行说明。

例 1

假设在主线程中有如下代码:

 
  1. public class Run1
  2. {
  3. public static void main(String[] args)
  4. {
  5. //调用currentThread()方法输出当前线程名称
  6. System.out.println(Thread.currentThread().getName());
  7. }
  8. }


执行后在控制台会输出“main”,这说明 main() 方法被名为 main 的线程调用。

上例中 currentThread() 方法在主线程中,再来看一个在线程类中调用该方法的示例。假设 MyThread06 线程类的代码如下:

 
  1. package ch14;
  2. public class MyThread06 extends Thread
  3. {
  4. public MyThread06()
  5. {
  6. //调用currentThread()方法输出当前线程名称
  7. System.out.println("构造方法的打印:"+Thread.currentThread().getName());
  8. }
  9. @Override
  10. public void run()
  11. {
  12. //调用currentThread()方法输出当前线程名称
  13. System.out.println("run方法的打印:"+Thread.currentThread().getName());
  14. }
  15. }


接下来编写主线程代码,创建 MyThread06 线程实例并启动线程。代码如下:

 
  1. package ch14;
  2. public class Test09
  3. {
  4. public static void main(String[] args)
  5. {
  6. MyThread06 mythread=new MyThread06();
  7. mythread.start();
  8. //mythread.run();
  9. }
  10. }


运行主线程将看到如下所示的结果。

构造方法的打印:main
run方法的打印:Thread-0


从运行结果可以发现,MyThread06 类的构造函数是被 main 线程调用的,而 run() 方法是被名称为 Thread-0 的线程调用的,run() 方法是自动调用的方法。

对主线程的代码进行简单修改,使用“mythread.run()”代码来启动线程,此时的运行结果如下所示。

构造方法的打印:main
run方法的打印:main


和之前的运行结果进行对比可以发现,此时 run() 方法的打印也是 main 线程调用的。

例 2

再来测试一个更复杂的情况。假设 MyThread07 线程类的代码如下:

 
  1. package ch14;
  2. public class MyThread07 extends Thread
  3. {
  4. public MyThread07()
  5. {
  6. System.out.println("构造方法---开始");
  7. System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName());
  8. System.out.println("this.getName()="+this.getName());
  9. System.out.println("构造方法---结束");
  10. }
  11. @Override
  12. public void run()
  13. {
  14. System.out.println("run()方法---开始");
  15. System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName());
  16. System.out.println("this.getName()="+this.getName());
  17. System.out.println("run()方法---结束");
  18. }

}

如上述代码所示,在 MyThread07 类的构造方法和 run() 方法中都调用了 currentThread() 方法。那么在启动该线程时构造方法的线程名称和 run() 方法中的线程名称是否相同呢?带着上面的疑问,我们来编写一个主线程对 MyThread07 类进行测试。主线程代码如下:

 
  1. package ch14;
  2. public class Test10
  3. {
  4. public static void main(String[] args)
  5. {
  6. //创建MyThread07线程实例
  7. MyThread07 myThread=new MyThread07();
  8. //创建一个线程
  9. Thread t1=new Thread(myThread);
  10. //设置线程的名称
  11. t1.setName("A");
  12. //启动线程
  13. t1.start();
  14. }

}

执行后的输出结果如下:

构造方法---开始
Thread.currentThread().getName()=main
this.getName()=Thread-0
构造方法---结束
run()方法---开始
Thread.currentThread().getName()=A
this.getName()=Thread-0
run()方法---结束


从结果可以发现,虽然 this.getName() 方法返回的都是 Thread-0,但是在构造方法中使用的即是 main 线程,而在 run() 方法中使用的是 A 线程。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值