Thread start(Thread子类.start(); 这样属于开启新的线程,不属于方法调用)
Thread.currentThread().getName(); 获取当前正在运行的线程执行路径名称
Thread.currentThread().getName(); 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:
Demo extends Thread { getName(); } 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:
package android.java.thread3.thread2; class Demo extends Thread { // 继承Thread 并重写 run() 方法,属于定义一个线程子类 private String name; public Demo(String name) { this.name = name; } /** * run方法里面执行的是start线程里面执行任务 */ @Override public void run() { super.run(); showMethod(); } public void showMethod() { for (int i = 0; i < 10; i++) { System.out.println("Demo showMethod >>>>>>>" + name + " " + i + " 当前执行这行代码的线程:" + getName()); } } } public class Test { public static void main(String[] args) { Demo demo1 = new Demo("乔峰"); Demo demo2 = new Demo("段誉"); // 任务1 >>>启动一个新线程去执行任务 demo1.start(); // 任务2 >>>启动一个新线程去执行任务 demo2.start(); // 任务3 >>>main线程在执行 for (int i = 0; i < 10; i++) { System.out.println("Test main " + i + " 当前执行这行代码的线程:" + Thread.currentThread().getName()); } } }
执行的日志:
Demo showMethod >>>>>>>段誉 0 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>段誉 1 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>乔峰 0 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>段誉 2 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>乔峰 1 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>段誉 3 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>乔峰 2 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>乔峰 3 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>乔峰 4 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>乔峰 5 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>乔峰 6 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>乔峰 7 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>乔峰 8 当前执行这行代码的线程:Thread-0
Demo showMethod >>>>>>>段誉 4 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>乔峰 9 当前执行这行代码的线程:Thread-0
Test main 0 当前执行这行代码的线程:main
Test main 1 当前执行这行代码的线程:main
Demo showMethod >>>>>>>段誉 5 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>段誉 6 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>段誉 7 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>段誉 8 当前执行这行代码的线程:Thread-1
Demo showMethod >>>>>>>段誉 9 当前执行这行代码的线程:Thread-1
Test main 2 当前执行这行代码的线程:main
Test main 3 当前执行这行代码的线程:main
Test main 4 当前执行这行代码的线程:main
Test main 5 当前执行这行代码的线程:main
Test main 6 当前执行这行代码的线程:main
Test main 7 当前执行这行代码的线程:main
Test main 8 当前执行这行代码的线程:main
Test main 9 当前执行这行代码的线程:main
以上代码:可以看到有三条线程在运行,Thread-1 Thread-0 main
Thread run(Thread子类.run(); 这样属于方法调用,没有开启线程)
Thread.currentThread().getName(); 获取当前正在运行的线程执行路径名称
Thread.currentThread().getName(); 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:
Demo extends Thread { getName(); } 调用的是>>>>>>> java.lang包中的Thread源代码的以下代码:
package android.java.thread3.thread2; class Demo extends Thread { // 继承Thread 并重写 run() 方法,属于定义一个线程子类 private String name; public Demo(String name) { this.name = name; } /** * run方法里面执行的是start线程里面执行任务 */ @Override public void run() { super.run(); showMethod(); } public void showMethod() { for (int i = 0; i < 10; i++) { System.out.println("Demo showMethod >>>>>>>" + name + " " + i + " getName():" + getName() + " ------- Thread.currentThread().getName():" + Thread.currentThread().getName()); } } } public class Test { public static void main(String[] args) { Demo demo1 = new Demo("乔峰"); Demo demo2 = new Demo("段誉"); // 任务1 >>>main线程在执行 demo1.run(); // 注意⚠️ 这个是方法调用,还是在main线程中运行,并没有开启启动线程,只有调用 .start();才会开启启动线程 // 任务2 >>>main线程在执行 demo2.run(); // 注意⚠️ 这个是方法调用,还是在main线程中运行,并没有开启启动线程,只有调用 .start();才会开启启动线程 // 任务3 >>>main线程在执行 for (int i = 0; i < 10; i++) { System.out.println("Test main " + i + " 当前执行这行代码的线程:" + Thread.currentThread().getName()); } } }
打印的日志:
以下打印的日志中:Demo showMethod ----> getName():Thread-0 和 Thread.currentThread().getName():main 为什么不一样呢?
答:getName():Thread-0得到的是 Demo extends Thread 后得到的类名叫Thread-0/Thread-1;
Thread.currentThread().getName():main: Demo是被main线程执行的,所以Demo的执行路径是main
Demo showMethod >>>>>>>乔峰 0 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 1 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 2 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 3 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 4 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 5 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 6 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 7 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 8 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>乔峰 9 getName():Thread-0 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 0 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 1 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 2 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 3 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 4 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 5 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 6 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 7 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 8 getName():Thread-1 ------- Thread.currentThread().getName():main
Demo showMethod >>>>>>>段誉 9 getName():Thread-1 ------- Thread.currentThread().getName():main
Test main 0 当前执行这行代码的线程:main
Test main 1 当前执行这行代码的线程:main
Test main 2 当前执行这行代码的线程:main
Test main 3 当前执行这行代码的线程:main
Test main 4 当前执行这行代码的线程:main
Test main 5 当前执行这行代码的线程:main
Test main 6 当前执行这行代码的线程:main
Test main 7 当前执行这行代码的线程:main
Test main 8 当前执行这行代码的线程:main
Test main 9 当前执行这行代码的线程:main
三个任务只有一个线程main在执行:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现