文
章
目
录
章
目
录
Java Thread类提供了获取当前线程对象、获取和设置线程名称、以及获取线程ID的API,我们来一起学习下。
1、Thread类获取当前线程对象
此方法是Thread类的静态方法,可以直接使用Thread类调用。
这个方法是在哪个线程执行中调用的,就会得到哪个线程对象。
这个方法是在哪个线程执行中调用的,就会得到哪个线程对象。
方法名称 | 说明 |
---|---|
static Thread currentThread() | 返回对当前正在执行的线程对象的引用 |
代码示例:
// 获取当前正在执行的线程
Thread thread = Thread.currentThread();
2、获取和设置线程名称
获取和设置线程名称的API如下:
方法名称 | 说明 |
---|---|
getName() | 获取当前线程的名称,默认线程名称是Thread-索引 |
setName(String name) | 将此线程的名称更改为指定的名称,通过构造器也可以设置线程名称 |
代码示例:
public class ThreadDemo {
public static void main(String[] args) {
Thread t1 = new MyThread();
// 获取子线程默认名称
System.out.println(t1.getName()); // Thread-0
// 设置线程名称
t1.setName("1号线程");
t1.start();
Thread t2 = new MyThread();
// 获取子线程默认名称
System.out.println(t2.getName()); // Thread-1
// 设置线程名称
t2.setName("2号线程");
t2.start();
// 获取当前线程对象(在这里也就是主线程)
Thread m = Thread.currentThread();
// 获取主线程默认名称
System.out.println(m.getName());
}
}
// 创建线程对象
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 拿到线程的名称用于区分
System.out.println(Thread.currentThread().getName() + "输出: " + i);
}
}
}
输出结果类似如下:
Thread-0
Thread-1
main
1号线程输出: 0
1号线程输出: 1
1号线程输出: 2
2号线程输出: 0
1号线程输出: 3
1号线程输出: 4
2号线程输出: 1
2号线程输出: 2
2号线程输出: 3
2号线程输出: 4
Thread构造器也是可以为线程设置名字的:
我们可以在子类MyThread中调用父类Thread构造器, 就可以在创建对象时为线程设置名称, 不需要单独调用setName方法
方法名称 | 说明 |
---|---|
Thread(String name) | 可以为当前线程指定名称 |
Thread(Runnable target) | 封装Runnable对象成为线程对象 |
Thread(Runnable target ,String name ) | 封装Runnable对象成为线程对象,并指定线程名称 |
public class ThreadDemo {
public static void main(String[] args) {
// 创建线程时使用构造器设置名称
Thread t1 = new MyThread("1号线程");
t1.start();
Thread t2 = new MyThread("2号线程");
t2.start();
}
}
// 创建线程对象
class MyThread extends Thread {
public MyThread() {
}
// 调用父类构造器
public MyThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 拿到线程的名称用于区分
System.out.println(Thread.currentThread().getName() + "输出: " + i);
}
}
}
3、获取线程ID
public long getId()获取线程的唯一ID,,线程的ID在整个JVM进程中都会是唯一的。并且是从0开始逐次递增。在一个JVM进程启动的时候,实际上是开辟了很多个线程,自增序列已经有了一定的消耗,因此我们自己创建的线程可能并不是第0号线程。
代码示例:
// 获取线程长整型的 id,id 唯一
Thread t1 = new MyThread();
long id = t1.getId();
4、总结
以上就是Java Thread如何获取当前线程、线程名称和ID的全部API方法。