1.3currentThread()方法

currentThread()方法可以返回段正在被哪个线程调用的信息。

示例代码:

public class Main {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
    }
}

结果:说明main()被名为main的线程调用。

示例代码:

public class OneThread extends Thread {
    public OneThread() {
        System.out.println("构造方法的打印: " + Thread.currentThread().getName());
    }

    @Override
    public void run() {
        System.out.println("run方法的打印:" + Thread.currentThread().getName());
    }
}

 执行方法:

public class Main {
    public static void main(String[] args) {
        OneThread ot = new OneThread();
        ot.start();
    }
}

结果:

若执行方法为:

public class Main {
    public static void main(String[] args) {
        OneThread ot = new OneThread();
        ot.run();//注意此处调用的是run(),我们曾提过,调用run()相当于将run()交给其他线程来完成
    }
}

结果:

更复杂的示例:

public class TwoThread extends Thread {
    public TwoThread() {
        System.out.println("Count-Operate--begin");
        System.out.println("Thread.currentThread().getName()= " + Thread.currentThread().getName());
        System.out.println("this.getName()= " + this.getName());
        System.out.println("Count-Operate--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");
    }
}

 执行代码:

public class Main {
    public static void main(String[] args) {
        TwoThread tt = new TwoThread();
        Thread t = new Thread(tt);
        t.setName("A");
        t.start();
    }
}

 结果:

根据结果逆向分析:Thread.currentThread().getName()获得的始终是主线程(也就是说由JVM创建的main线程)。

而由对象本身调用的getName()获取的都是打开的第二个线程Thread-0,也就是执行start()方法的线程。

现在分析发现这个思考是有问题的。

Thread.currentThread().getName()获得的始终是执行start()方法的线程(或者说是调用run()方法的线程)。

而this.getName()获得的都是run()方法所在线程对象的名称。

源码地址:https://github.com/lilinzhiyu/threadLearning

如果有错误欢迎各位指出。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Django Scrapy

python使用正则表达式

正则表达式 目标: 了解 : (0)\w 匹配 一个字母或者数字 (1)\d 只匹配数字 (2)\s 至少匹配一个空格 同理"\_","\-"分别匹配 ...

3768
来自专栏GreenLeaves

auguements实参对象的数组化

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ti...

19510
来自专栏开发与安全

面向对象编程风格 VS 基于对象编程风格(boost::bind/function)

本文主要通过实现Thread 类来展现两种编程风格的不同点。 很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)缺...

2260
来自专栏程序生活

Java学习(二)Static关键字的理解

在讲Static之前,引入一个小题 ? 答案为“c” ? 运行结果 Cannot make a static reference to the non-stat...

3648
来自专栏待你如初见

Day08

1183
来自专栏菜鸟计划

javascript 面向对象(多种创建对象的方式)

创建对象 第一种:基于Object对象 var person = new Object(); person.name = 'My Name'; person.a...

3356
来自专栏吾爱乐享

java之学习正则split分割的典型案例

1244
来自专栏余林丰

“不可变的对象”与“不可变的对象引用”

什么是不可变的对象呢?我们都知道String是不可变的,如果有涉及大量的字符串拼接我们最好不要用String,虽然我们在代码中可以这样写: String str...

2049
来自专栏JetpropelledSnake

Python面试题之Python中的类和实例

类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后...

832
来自专栏C语言及其他语言

【每日一题】问题 1117: K-进制数

考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.

912

扫码关注云+社区