Thread类的构造方法及常用方法

API中java.lang.Thread类定义了有关线程的一些方法,具体如下:

构造方法

public Thread():分配一个新的线程对象。

public Thread(String name):分配一个指定名字的新的线程对象。

public Thread(Runable target):分配一个带有制定目标新的线程对象。

public Thread(Runable target,String name):分配一个带有指定目标新的线程对象并指定名字。

常用方法

1.public String getName():获取当前线程名称。

// 定义一个Thread子类
public class MyThread2 extends Thread{

    // 重写Thread类中的run方法,设置线程任务
    @Override
    public void run() {
        // super.run();
        // 获取线程名称
        System.out.println(getName());
    }
}
/*
线程名称:
    主线程:main
    新线程:Thread-0,Thread-1,Thread-2
 */
public class Demo11ThreadName {
    public static void main(String[] args) {
        // 创建一个Thread子类对象
        MyThread2 mt = new MyThread2();
        // 调用start方法开启新线程,执行run方法
        mt.start();
        // 匿名类
        new MyThread2().start();
    }
}

运行截图:

2.public static Thread currentThread():返回对当前正在执行的线程对象的引用。

然后可以用线程中的方法getName来获取线程的名称

@Override
public void run() {
    // 返回对当前正在执行的线程对象的引用
    // 返回值:线程
    Thread td = Thread.currentThread();
    System.out.println(td);
    String name = td.getName();
    System.out.println(name);
}
public static void main(String[] args) {
    // 创建一个Thread子类对象
    MyThread2 mt = new MyThread2();
    // 调用start方法开启新线程,执行run方法
    mt.start();
    // 匿名类
    new MyThread2().start();
}

运行截图:

// 获取主线程的名称
// 只有这一个方法,因为主方法所在的类并没有继承Thread类
// 不能直接调用属于Thread类的getName方法
// 而是调用Thread类的静态方法获取当前线程的以用,然后用线程的getName方法获取名称
Thread.currentThread().getName();

3.public void setName():设置线程名称。

/*
设置线程的名称(两种方式):
1.使用Thread类中的方法setName(名字)
2.创建一个带有参数的构造方式,参数传递线程的名称;调用父类的带参构造方法,
把线程名称传递给父类i,让父类(Thread)给子类起一个名字。
注意区分,被赋值线程对象地址值的变量名(对象名)并不是线程的名称
 */
public class MyThread3 extends Thread{
    // 重写run方法
    @Override
    public void run() {
        //super.run();
        // 获取当前线程名称
        System.out.println(Thread.currentThread().getName());
    }

    public MyThread3() {
    }

    public MyThread3(String name) {
        // 调用父类的带参构造方法,
        //把线程名称传递给父类
        super(name);
    }
}
public static void main(String[] args) {
    // 开启多线程
    MyThread3 mt = new MyThread3();
    // 给线程设置名称
    mt.setName("线程1");
    // 调用start方法开启新线程,执行run方法
    mt.start();

    // 多线程
    MyThread3 mt1 = new MyThread3("线程2");
    mt1.start();
}

运行截图:

注意区分:被赋值线程对象的地址值的变量名(对象名)并不是该线程的名称!

4.public void start():导致此线程程开始执行;Java虚拟机调用此线程的run方法。

5.public void run():此线程要执行的任务在此处定义代码。

6.public static void sleep(long millies):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。

public static void main(String[] args) {
    // 模拟秒表
    for (int i = 1; i < 60; i++) {
        System.out.println(i);
        // 一秒钟打印一次
        // 使用Thread类的静态方法sleep(long millies)方法
        // 让程序睡眠指定毫秒数*1000
        // 有异常,要么throws声明异常,交给JVM,要么try-catch捕捉异常,自行处理
        // 此处使用try-catch捕捉
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/wardo_l/article/details/114224024