1.相关的方法
long getId() | 获取调用对象所表示线程的编号 |
String getName() | 获取调用对象所表示的线程的名称 |
void setName(String name) | 设置/修改线程的名称为参数指定的数值 |
static Thread currentThread() | 获取当前正在执行线程的引用 |
2.案例题目
自定义类,继承Thread类,并重写run方法。
在run方法中,先打印当前线程的编号和名称,然后将线程的名称修改为"zhangfei"后,
再次打印编号和名称。
要求在main方法中,也打印主线程的编号和名称。
代码一
1 package com.lagou.task18; 2 3 public class ThreadIdNameTest extends Thread { 4 5 public ThreadIdNameTest(String name) { 6 super(name); // 表示调用父类的构造方法 7 } 8 9 @Override 10 public void run() { 11 System.out.println("子线程的编号是:" + getId() + ",名称是:" + getName()); // 14 Thread-0 guanyu 12 // 修改名称为"zhangfei" 13 setName("zhangfei"); 14 System.out.println("修改后子线程的编号是:" + getId() + ",名称是:" + getName()); // 14 zhangfei 15 } 16 17 public static void main(String[] args) { 18 19 ThreadIdNameTest tint = new ThreadIdNameTest("guanyu"); 20 tint.start(); 21 22 // 获取当前正在执行线程的引用,当前正在执行的线程是主线程,也就是获取主线程的引用 23 Thread t1 = Thread.currentThread(); 24 System.out.println("主线程的编号是:" + t1.getId() + ", 名称是:" + t1.getName()); 25 } 26 }
代码二
1 public class RunnableIdNameTest implements Runnable { 2 @Override 3 public void run() { 4 // 获取当前正在执行线程的引用,也就是子线程的引用 5 Thread t1 = Thread.currentThread(); 6 System.out.println("子线程的编号是:" + t1.getId() + ", 名称是:" + t1.getName()); // 14 guanyu 7 t1.setName("zhangfei"); 8 System.out.println("修改后子线程的编号是:" + t1.getId() + ", 名称是:" + t1.getName()); // 14 zhangfei 9 } 10 11 public static void main(String[] args) { 12 13 RunnableIdNameTest rint = new RunnableIdNameTest(); 14 //Thread t2 = new Thread(rint); 15 Thread t2 = new Thread(rint, "guanyu"); 16 t2.start(); 17 18 // 获取当前正在执行线程的引用,当前正在执行的线程是主线程,也就是获取主线程的引用 19 Thread t1 = Thread.currentThread(); 20 System.out.println("主线程的编号是:" + t1.getId() + ", 名称是:" + t1.getName()); 21 } 22 }
3. 运行效果
代码一
代码二