【Java】线程常用方法

举报
兮动人 发表于 2022/04/28 09:30:02 2022/04/28
【摘要】 1. 线程常用方法setName 设置线程名称,使之与参数name相同getName 返回该线程的名称start 使该线程开始执行;Java虚拟机底层调用该线程的start0方法run 调用线程对象run方法;setPriority 更改线程的优先级getPriority 获取线程的优先级sleep 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)interrupt 中断线程 2. 注...

1. 线程常用方法

  1. setName 设置线程名称,使之与参数name相同
  2. getName 返回该线程的名称
  3. start 使该线程开始执行;Java虚拟机底层调用该线程的start0方法
  4. run 调用线程对象run方法;
  5. setPriority 更改线程的优先级
  6. getPriority 获取线程的优先级
  7. sleep 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
  8. interrupt 中断线程
    在这里插入图片描述

2. 注意事项和细节

  1. start:底层会创建新的线程,调用runrun 就是一个简单的方法调用,不会启动新线程
  2. 线程优先级的范围
  3. interrupt:中断线程,但并没有真正的结束线程。所以一般用于中断正在休眠线程
  4. sleep:线程的静态方法,使当前线程休眠

3. 案例演示

  • interrupt 不是终止线程,而是中断线程。
  • 如下:在循环10次吃东西的子进程,然后主线程在每隔1秒打印5次hi,接着使用 interrupt 方法中断子线程休眠,当t.interrupt();时,就会被异常捕获中断子进程休眠的20秒,这个时候子线程还没有休眠完20秒就被中断,中断后再继续循环10次吃东西,相当于子进程提前结束休眠的时间。
public class ThreadMethod01 {
    public static void main(String[] args) throws InterruptedException {
        //测试相关的方法
        T t = new T();
        t.setName("jack");
        t.setPriority(Thread.MIN_PRIORITY);//设置优先级为 1
        t.start();//启动子线程


        //主线程打印5次hi ,然后就中断 子线程的休眠
        for(int i = 0; i < 5; i++) {
            Thread.sleep(1000);
            System.out.println("hi " + i);
        }

        System.out.println(t.getName() + " 线程的优先级 =" + t.getPriority());//1

        t.interrupt();//当执行到这里,就会中断 t线程的休眠.



    }
}

class T extends Thread { //自定义的线程类
    @Override
    public void run() {
        while (true) {
            for (int i = 0; i < 10; i++) {
                //Thread.currentThread().getName() 获取当前线程的名称
                System.out.println(Thread.currentThread().getName() + " 吃东西~~~" + i);
            }
            try {
                System.out.println(Thread.currentThread().getName() + " 休眠中~~~");
                Thread.sleep(20000);//20秒
            } catch (InterruptedException e) {
                //当该线程执行到一个interrupt 方法时,就会catch 一个 异常, 可以加入自己的业务代码
                //InterruptedException 是捕获到一个中断异常.
                System.out.println(Thread.currentThread().getName() + "被 interrupt了");
            }
        }
    }
}

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。