Java并发编程(二)——Thread.currentThread()研究

本文探讨了Java中Thread.currentThread()方法的作用,分析为何不直接使用this,而是通过静态方法获取当前线程引用。通过示例代码展示其工作原理,并总结了currentThread()在并发编程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java并发编程(二)——Thread.currentThread()研究

一,存在的问题

  Thread.currentThread()是Thread的一个静态方法,用来获取当前线程对象的一个引用。
  问题在于为什么不简单的用this来获取,而单独写了一个静态的currentThread()方法来获取当前线程呢?

二,一个小demo

  首先看一个小例子,该例子引用自知乎https://www.zhihu.com/question/20944522

    public class Demo {
        public static void main(String[] args) {
            MyThread mt = new MyThread();
            new Thread(mt).start();
            new Thread(mt, "Name1").start();
            new Thread(mt, "Name2").start();

            System.out.println(Thread.currentThread().getName()); // main主方法
    //      System.out.println(this.getName());                   // this获取不到线程对象
        }
    }

    class MyThread extends Thread {
        @Override
        public void run() {
            try {
                Thread.sleep(3000);
                Thread t = Thread.currentThread();
                System.out.println("当前线程名字:" + t.getName() + " 当前线程的优先级别为:"+ t.getPriority() + " ID:" + t.getId());
   //           System.out.println("当前线程名字:" + this.getName() + " 当前线程的优先级别为:" + this.getPriority() + " ID:"+ this.getId());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

上面这个例子的执行结果是:

main
当前线程名字:Thread-1 当前线程的优先级别为:5 ID:10
当前线程名字:Name1 当前线程的优先级别为:5 ID:11
当前线程名字:Name2 当前线程的优先级别为:5 ID:12

这个结果应该是没什么问题的,切换注释后(main中的注释切换后编译错误,这很好理解)执行的结果是:

main
当前线程名字:Thread-0 当前线程的优先级别为:5 ID:9
当前线程名字:Thread-0 当前线程的优先级别为:5 ID:9
当前线程名字:Thread-0 当前线程的优先级别为:5 ID:9

  这个结果如何解释呢?为什么输出的都一样呢?
  其实这时的this并不是new Thread(mt),new Thread(mt, “Name1”)以及new Thread(mt, “Name2”),而是mt,所以输出一致,都是mt的名称和id。

三,总结

  Thread提供静态方法currentThread()来供我们调用,既可以避免this无法获取到main线程的问题,又可以避免this无法获取到Thread t2=new Thread(Thread t)来开启的线程的问题,可以说currentThread方法可以在所有场合获取到正确的当前线程。当然,具体底层实现是由C语言实现的,不需要深究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值