98-Java的多线程:Thread类常用API

一、Thread类常用API说明

1、Thread常用方法:
  • 获取线程名称getName()
  • 设置名称setName()
  • 获取当前线程对象currentThread()
方法名称说明
String getName()返回当前线程的名称(默认线程名称是Thread-索引
void setName(String name)将此线程的名称更改为指定的名称(通过构造器也可以设置线程名称
public static Thread currentThread()返回当前正在执行的线程对象的引用
注意:
  • 1、currentThread()方法是Thread类的静态方法,可以直接使用Thread类调用。
  • 2、currentThread()方法在哪个线程执行中调用的,就会得到哪个线程对象。
重点问题?

当很多线程在执行的时候,我们怎么去区分这些线程?

  • 此时需要使用Thread的常用方法:getName()、setName()、currentThread()等

package com.app.d2_thread_api;

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 4; i++) {
            System.out.println(Thread.currentThread().getName() + "输出:" + i);
        }
    }
}
package com.app.d2_thread_api;

/**
    目标:掌握线程常用API
 */
public class ThreadDemo01 {
    // main方法由主线程负责调度的
    public static void main(String[] args) {
        // 创建线程任务对象
        Thread t1 = new MyThread();

        // 设置t1线程名称(默认名称:Thread-索引,例如: Thread-0、Thread-1)
        t1.setName("1号线程");
        // 启动线程
        t1.start();
        // 获取t1线程名称并输出到控制台
        System.out.println(t1.getName());


        Thread t2 = new MyThread();
        t2.start();
        System.out.println(t2.getName());


        // 获取当前线程对象
        Thread m = Thread.currentThread();
        System.out.println(m.getName());    // 主线程的名称就叫main

        for (int i = 0; i < 4; i++) {
            System.out.println(m.getName() + "线程输出:" + i);
        }
    }
}
1号线程
Thread-1
main
main线程输出:0
Thread-1输出:0
1号线程输出:0
Thread-1输出:1
main线程输出:1
Thread-1输出:2
1号线程输出:1
Thread-1输出:3
main线程输出:2
1号线程输出:2
main线程输出:3
1号线程输出:3

Process finished with exit code 0



2、Thread的构造器
构造器说明
public Thread(String name)为当前线程指定名称
public Thread(Runnable target)封装Runnable对象成为线程对象
public Thread(Runnable target, String name)封装Runnable对象成为线程对象,并指定线程名称
package com.app.d2_thread_api;

public class MyThread extends Thread{
    public MyThread() {
    }

    public MyThread(String name) {
        // 为当前线程设置名称,通过super关键字,送给父类Thread的有参数构造器的初始化名称
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 4; i++) {
            System.out.println(Thread.currentThread().getName() + "输出:" + i);
        }
    }
}
package com.app.d2_thread_api;

/**
    目标:掌握Thread类的有参构造器设置线程名称
 */
public class ThreadDemo02 {
    public static void main(String[] args) {
        Thread t1 = new MyThread("1号线程");
        t1.start();
        System.out.println(t1.getName());


        Thread t2 = new MyThread();
        t2.start();
        System.out.println(t2.getName());


        Thread m = Thread.currentThread();
        System.out.println(m.getName());
        m.setName("最牛线程");

        for (int i = 0; i < 4; i++) {
            System.out.println(m.getName() + "输出:" + i);
        }
    }
}
1号线程
Thread-0
main
最牛线程输出:0
最牛线程输出:1
1号线程输出:0
最牛线程输出:2
最牛线程输出:3
Thread-0输出:0
1号线程输出:1
Thread-0输出:1
1号线程输出:2
1号线程输出:3
Thread-0输出:2
Thread-0输出:3

Process finished with exit code 0



3、Thread不常用方法:
  • yieldjoininterrupt
  • 不推荐的方法:stop守护线程线程优先级等线程的控制方法,在开发中很少使用;
  • 这些方法会在高级篇及后续需要使用到的时候再讲解。


4、Thread类的线程休眠方法
方法名称说明
public static void sleep(long time)让当前线程休眠指定的时间后再继续执行,单位为毫秒
package com.app.d2_thread_api;

/**
    目标:掌握Thread的线程休眠API
 */
public class ThreadDemo03 {
    // main方法是由主线程负责调度的
    public static void main(String[] args) throws Exception {
        for (int i = 1; i <= 5; i++) {
            System.out.println("第" + i + "天了~");
            if (i == 2) {
                // 段子:项目经理让我加上了这行代码,如果用户愿意充钱,我就注释掉!!
                // 到第二天了,休息五秒
                Thread.sleep(5000);
            }
        }
    }
}
  • 在输出到第2天的时候,线程会休眠5秒钟,然后再输出剩下的天数
第1天了~
第2天了~
第3天了~
第4天了~
第5天了~

Process finished with exit code 0




总结

1、Thread常用方法、构造器有哪些?

方法名称说明
String getName()获取当前线程的名称(默认线程名称是Thread-索引
void setName(String name)设置线程名称
public static Thread currentThread()返回当前线程对象
public static void sleep(long time)让线程休眠指定的时间,单位为毫秒
public void run()线程任务方法
public void start()线程启动方法
构造器说明
public Thread(String name)可以为当前线程指定名称
public Thread(Runnable target)把Runnable对象交给线程对象
public Thread(Runnable target, String name)把Runnable对象交给线程对象,并指定线程名称

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值