一. 线程的名字
下面来看一下Thread类的name属性,它的类型是String。它其实就是线程的名字。在Thread类中,有String getName()和void setName(String)两个方法用来设置和获取这个属性的值。
同时,Thread类还提供相应的构造方法,让Thread类的对象在创建的时候就有一个名字。构造方法如下:
a.Thread(String name):接受一个String实例为参数的Thread类的构造方法,这个参数就是这个线程的名字
b.Thread(Runnable target,String name):接受一个Runnable实例和一个String实例为参数的Thread类构造方法。其中Runnable中的run()方法就是线程将要执行的方法;String实例就是这个线程的名字。
如果在创建一个Thread实例的时候没有为Thread实例提供名字,那么Thread实例将使用一个默认的名字。对于在程序中创建的线程,线程的默认名字一般是“Thread-”加上一个递增的整数;而对于主线程,它的名字一般会被设置为main。
实例:
package com.bijian.study; public class ShowThreadName extends Thread { //继承自Thread类 public ShowThreadName() { //构造方法,没有参数 super(); //调用父类相应的构造方法 } public ShowThreadName(String name) { //构造方法,提供线程的名字 super(name); //调用父类相应的构造方法 } public void run() { //覆盖run()方法 System.out.println("这个线程的名字是:" + this.getName());//输出线程的名字 } }
package com.bijian.study; public class ShowThreadNameMain { public static void main(String[] args) { //使用无参数的构造方法创建Thread类实例,这是它将有一个默认的名字 ShowThreadName defaultName = new ShowThreadName(); //使用构造方法给线程指定一个名字 ShowThreadName name = new ShowThreadName("线程的名字"); //启动两个线程 defaultName.start(); name.start(); } }
运行结果:
这个线程的名字是:Thread-0
这个线程的名字是:线程的名字
二. 得到当前的线程
Thread类的静态方法currentThread()
Java的线程是执行Java程序的基本单位,也就是说,所有的Java代码最终都是由线程执行的。如果在程序中需要得到“执行当前代码的线程的引用”,那么就可以使用Thread类的静态方法Thread.currentThread()。
这个方法的返回值是Thread的引用,这个引用所指向的Thread类的实例正是“指向当前代码的线程”。